c#之process類相關整理
一、根據進程名擷取進程的使用者名稱?
需要添加對 System.Management.dll 的引用
using System.Diagnostics;using System.Management;static void Main(string[] args){foreach (Process p in Process.GetProcesses()){Console.Write(p.ProcessName);Console.Write("----");Console.WriteLine(GetProcessUserName(p.Id));}Console.ReadKey();}private static string GetProcessUserName(int pID){string text1 = null;SelectQuery query1 = new SelectQuery("Select * from Win32_Process WHERE processID=" + pID);ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(query1);try{foreach (ManagementObject disk in searcher1.Get()){ManagementBaseObject inPar = null;ManagementBaseObject outPar = null;inPar = disk.GetMethodParameters("GetOwner");outPar = disk.InvokeMethod("GetOwner", inPar, null);text1 = outPar["User"].ToString();break;}}catch{text1 = "SYSTEM";}return text1;}
進程名 是 p.ProcessName
二、擷取進程
using System.Diagnostics;
【注】System.Diagnostics 命名空間提供特定的類,使您能夠與系統進程、事件記錄和效能計數器進行互動。
string str = "";Process[] processes;//Get the list of current active processes.processes = System.Diagnostics.Process.GetProcesses();//Grab some basic information for each process.Process process;for(int i = 0;i<processes.Length-1;i++){process = processes[i];str = str + Convert.ToString(process.Id) + " : " +process.ProcessName + "\r\n";}System.Windows.Forms.MessageBox.Show(str);txtProcessID.Text = processes[0].Id.ToString();//顯示進程相關資訊string s = "";System.Int32 processid;Process process;processid = Int32.Parse(txtProcessID.Text);process = System.Diagnostics.Process.GetProcessById(processid);s = s + "該進程的總體優先順序類別:" + Convert.ToString(process.PriorityClass) + " \r\n";s = s + "由該進程開啟的控制代碼數:" + process.HandleCount + "\r\n";s = s + "該進程的主視窗標題:" + process.MainWindowTitle + "\r\n";s = s + " 該進程允許的最小工作集大小:" + process.MinWorkingSet.ToString() + " \r\n";s = s + "該進程允許的最大工作集大小:" + process.MaxWorkingSet.ToString() + " \r\n";s = s + "該進程的分頁記憶體大小:" + process.PagedMemorySize + "\r\n";s = s + "該進程的峰值分頁記憶體大小:" + process.PeakPagedMemorySize + "\r\n";System.Windows.Forms.MessageBox.Show(s);}catch{System.Windows.Forms.MessageBox.Show("不合法的進程ID!");}
【注】Int32 實值型別表示值介於-2,147,483,648 到+2,147,483,647 之間的有符號整數。
Int32 提供了一些方法,來比較該類型的執行個體、將執行個體的值轉換為它的String 表示形式以及將數位String 表示形式轉換為該類型的執行個體。
有關格式規範代碼如何控制實值型別的String 表示形式的資訊,請參閱格式設定概述。
此類型實現介面IComparable、IFormattable 和IConvertible。使用Convert 類進行轉換,而不是使用此類型的IConvertible 顯式介面成員實現。
值得一提的是,Process 類具有很多成員變數,這些成員變數可以獲得進程的幾乎每一個細節。上面的例子中只是簡單地選擇了幾個成員加以示範。如果開發中有需要,可以參考MSDN Library,查詢Process類成員以獲得更詳細的資訊,這裡就不一一列出了。
三、殺死進程
private void button2_Click(object sender, EventArgs e){if (listView1.SelectedItems.Count > 0){try{string proName = listView1.SelectedItems[0].Text;Process[] p = Process.GetProcessesByName(proName);p[0].Kill();MessageBox.Show("進程關閉成功!");GetProcess();}catch{MessageBox.Show("無法關閉此進程!");}}else{MessageBox.Show("請選擇要終止的進程!");}}
四、C#中利用process類調用外部程式以及執行dos命令
private string RunCmd(string command){//執行個體一個Process類,啟動一個獨立進程Process p = new Process();//Process類有一個StartInfo屬性//設定程式名p.StartInfo.FileName = "cmd.exe";//設定程式執行參數 p.StartInfo.Arguments = "/c " + command;//關閉Shell的使用 p.StartInfo.UseShellExecute = false; //重新導向標準輸入 p.StartInfo.RedirectStandardInput = true;p.StartInfo.RedirectStandardOutput = true;//重新導向錯誤輸出 p.StartInfo.RedirectStandardError = true; //設定不顯示視窗p.StartInfo.CreateNoWindow = true; //啟動p.Start(); //也可以用這種方式輸入要執行的命令//不過要記得加上Exit要不然下一行程式執行的時候會當機//p.StandardInput.WriteLine(command);//p.StandardInput.WriteLine("exit"); //從輸出資料流取得命令執行結果return p.StandardOutput.ReadToEnd();}
轉載出處