国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

一個(gè)執(zhí)行Dos命令的窗口程序,與各位分享。

2019-11-17 02:43:01
字體:
供稿:網(wǎng)友
一個(gè)執(zhí)行Dos命令的窗口程序,與各位分享。

一個(gè)執(zhí)行Dos命令的窗口程序,與各位分享。

效果圖:具體實(shí)現(xiàn)在代碼中有詳細(xì)的注釋,請(qǐng)看代碼。實(shí)現(xiàn)執(zhí)行CMD命令的核心代碼(Cmd.cs):[csharp] using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.Threading; using System.Management; using System.Globalization; namespace Zbsoft.ExtendFunction { public class Cmd { /// <summary> /// 是否終止調(diào)用CMD命令執(zhí)行 /// </summary> PRivate static bool invokeCmdKilled = true; /// <summary> /// 獲取或設(shè)置是否終止調(diào)用CMD命令執(zhí)行 /// </summary> public static bool InvokeCmdKilled { get { return invokeCmdKilled; } set { invokeCmdKilled = value; if (invokeCmdKilled) { if (p != null && !p.HasExited) { killProcess(p.Id); } } } } private static Process p; private static Action<string> RefreshResult; /// <summary> /// 調(diào)用CMD命令,執(zhí)行指定的命令,并返回命令執(zhí)行返回結(jié)果字符串 /// </summary> /// <param name="cmdArgs">命令行</param> /// <param name="RefreshResult">刷新返回結(jié)果字符串的事件</param> /// <returns></returns> public static void InvokeCmd(string cmdArgs, Action<string> pRefreshResult = null) { InvokeCmdKilled = false; RefreshResult = pRefreshResult; if (p != null) { p.Close(); p = null; } p = new Process(); p.StartInfo.FileName = "cmd.exe"; p.ErrorDataReceived += new DataReceivedEventHandler(p_ErrorDataReceived); p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived); p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardError = true; p.StartInfo.CreateNoWindow = true; p.Start(); p.BeginErrorReadLine(); p.BeginOutputReadLine(); string[] cmds = cmdArgs.Split(new char[] { '/r', '/n' }, StringSplitOptions.RemoveEmptyEntries); foreach (var v in cmds) { Thread.Sleep(200); p.StandardInput.WriteLine(v); } //p.StandardInput.WriteLine("exit"); p.WaitForExit(); p.Dispose(); p.Close(); p = null; InvokeCmdKilled = true; } /// <summary> /// 輸入交互式命令 /// </summary> /// <param name="cmd"></param> public static void InputCmdLine(string cmd) { if (p == null) return; string[] cmds = cmd.Split(new char[] { '/r', '/n' }, StringSplitOptions.RemoveEmptyEntries); foreach (var v in cmds) { Thread.Sleep(200); p.StandardInput.WriteLine(v); } } /// <summary> /// 異步讀取標(biāo)準(zhǔn)輸出信息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> static void p_OutputDataReceived(object sender, DataReceivedEventArgs e) { if (RefreshResult != null && e.Data != null) RefreshResult(e.Data + "/r/n"); } /// <summary> /// 異步讀取錯(cuò)誤消息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> static void p_ErrorDataReceived(object sender, DataReceivedEventArgs e) { if (RefreshResult != null && e.Data != null) { RefreshResult(e.Data + "/r/n"); } } /// <summary> /// 關(guān)閉指定進(jìn)程ID的進(jìn)程以及子進(jìn)程(關(guān)閉進(jìn)程樹) /// </summary> /// <param name="id"></param> public static void FindAndKillProcess(int id) { killProcess(id); } /// <summary> /// 關(guān)閉指定進(jìn)程名稱的進(jìn)程以及子進(jìn)程(關(guān)閉進(jìn)程樹) /// </summary> /// <param name="name"></param> public static void FindAndKillProcess(string name) { foreach (Process clsProcess in Process.GetProcesses()) { if ((clsProcess.ProcessName.StartsWith(name, StringComparison.CurrentCulture)) || (clsProcess.MainWindowTitle.StartsWith(name, StringComparison.CurrentCulture))) killProcess(clsProcess.Id); } } /// <summary> /// 關(guān)閉進(jìn)程樹 /// </summary> /// <param name="pid"></param> /// <returns></returns> private static bool killProcess(int pid) { Process[] procs = Process.GetProcesses(); for (int i = 0; i < procs.Length; i++) { if (getParentProcess(procs[i].Id) == pid) killProcess(procs[i].Id); } try { Process myProc = Process.GetProcessById(pid); myProc.Kill(); } //進(jìn)程已經(jīng)退出 catch (ArgumentException) { ; } return true; } /// <summary> /// 獲取父進(jìn)程ID /// </summary> /// <param name="Id"></param> /// <returns></returns> private static int getParentProcess(int Id) { int parentPid = 0; using (ManagementObject mo = new ManagementObject("win32_process.handle='" + Id.ToString(CultureInfo.InvariantCulture) + "'")) { try { mo.Get(); } catch (ManagementException) { return -1; } parentPid = Convert.ToInt32(mo["ParentProcessId"], CultureInfo.InvariantCulture); } return parentPid; } } } 調(diào)用上述核心類的窗口代碼(Form2.cs):[csharp] using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; namespace Zbsoft.Test { public partial class Form2 : Form { Thread cmdThread; private Action<string> rf; public Form2() { InitializeComponent(); } /// <summary> /// 按CTRL+Enter鍵開始執(zhí)行命令 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { if (e.KeyCode == Keys.Enter && e.Control) { if (this.button3.Enabled) this.button3_Click(null, null); else this.button4_Click(null, null); } } private void Form2_Load(object sender, EventArgs e) { this.textBox1.Text = "help/r/ndir/r/nping 127.0.0.1"; rf = this.refreshCmdTxt; this.richTextBox1.AppendText("Dos命令執(zhí)行程序,支持批命令執(zhí)行。按Ctrl+Enter鍵開始執(zhí)行。如果一個(gè)命令長(zhǎng)時(shí)間不能結(jié)束的,如ping 127.0.0.1 -t,“停止執(zhí)行”按鈕可強(qiáng)制終止執(zhí)行。/r/n"); this.richTextBox1.AppendText("/r/n你的網(wǎng)卡Mac地址:" + Zbsoft.ExtendFunction.HardwareInfo.getID_NetCardId()); this.richTextBox1.AppendText(",Cpu序列號(hào):" + Zbsoft.ExtendFunction.HardwareInfo.getID_CpuId()); this.richTextBox1.AppendText(",硬盤序列號(hào):" + Zbsoft.ExtendFunction.HardwareInfo.getID_HardDiskId() + "/r/n"); this.richTextBox1.AppendText("/r/n常用的命令:/r/n"); this.richTextBox1.AppendText(@" ASSOC 顯示或修改文件擴(kuò)展名關(guān)聯(lián)。 ATTRIB 顯示或更改文件屬性。 BREAK 設(shè)置或清除擴(kuò)展式 CTRL+C 檢查。 BCDEDIT 設(shè)置啟動(dòng)數(shù)據(jù)庫中的屬性以控制啟動(dòng)加載。 CACLS 顯示或修改文件的訪問控制列表(ACL)。 CALL 從另一個(gè)批處理程序調(diào)用這一個(gè)。 CD 顯示當(dāng)前目錄的名稱或?qū)⑵涓摹? CHCP 顯示或設(shè)置活動(dòng)代碼頁數(shù)。 CHDIR 顯示當(dāng)前目錄的名稱或?qū)⑵涓摹? CHKDSK 檢查磁盤并顯示狀態(tài)報(bào)告。 CHKNTFS 顯示或修改啟動(dòng)時(shí)間磁盤檢查。 CLS 清除屏幕。 CMD 打開另一個(gè) Windows 命令解釋程序窗口。 COLOR 設(shè)置默認(rèn)控制臺(tái)前景和背景顏色。 COMP 比較兩個(gè)或兩套文件的內(nèi)容。 COMPACT 顯示或更改 NTFS 分區(qū)上文件的壓縮。 CONVERT 將 FAT 卷轉(zhuǎn)換成 NTFS。您不能轉(zhuǎn)換當(dāng)前驅(qū)動(dòng)器。 COPY 將至少一個(gè)文件復(fù)制到另一個(gè)位置。 DATE 顯示或設(shè)置日期。 DEL 刪除至少一個(gè)文件。 DIR 顯示一個(gè)目錄中的文件和子目錄。 DISKCOMP 比較兩個(gè)軟盤的內(nèi)容。 DISKCOPY 將一個(gè)軟盤的內(nèi)容復(fù)制到另一個(gè)軟盤。 DISKPART 顯示或配置磁盤分區(qū)屬性。 DOSKEY 編輯命令行、調(diào)用 Windows 命令并創(chuàng)建宏。 DRIVERQUERY 顯示當(dāng)前設(shè)備驅(qū)動(dòng)程序狀態(tài)和屬性。 ECHO 顯示消息,或?qū)⒚罨仫@打開或關(guān)上。 ENDLOCAL 結(jié)束批文件中環(huán)境更改的本地化。 ERASE 刪除一個(gè)或多個(gè)文件。 EXIT 退出 CMD.EXE 程序(命令解釋程序)。 FC 比較兩個(gè)文件或兩個(gè)文件集并顯示它們之間的不同。 FIND 在一個(gè)或多個(gè)文件中搜索一個(gè)文本字符串。 FINDSTR 在多個(gè)文件中搜索字符串。 FOR 為一套文件中的每個(gè)文件運(yùn)行一個(gè)指定的命令。 FORMAT 格式化磁盤,以便跟 Windows 使用。 FSUTIL 顯示或配置文件系統(tǒng)的屬性。 FTY
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 思茅市| 留坝县| 武川县| 治多县| 通河县| 溆浦县| 云阳县| 临西县| 罗平县| 普兰县| 右玉县| 轮台县| 准格尔旗| 郸城县| 谢通门县| 武宣县| 于都县| 靖安县| 泰兴市| 岚皋县| 昌江| 郴州市| 石屏县| 东海县| 民丰县| 汾西县| 高陵县| 安塞县| 铜川市| 中方县| 梓潼县| 板桥市| 黎城县| 维西| 墨玉县| 龙里县| 礼泉县| 台南市| 宁国市| 蒲江县| 灵川县|