用C#擷取進程資訊)

來源:互聯網
上載者:User
本文將以一個簡單的例子來說明如何使用C#獲得當前處於啟用狀態的進程並讀取某個特定ID 進程的基本資料。 現在有很多軟體都具有讀取系統進程的功能,比較著名的是Customizer XP,它是一個用來設定Windows XP 系統各種設定的軟體。這個軟體其中有一個功能就是能夠開啟或關閉系統運行時載入的程式。當然,本文沒有做到Customizer XP 那麼美觀和細化的程度,但是我想只要知道了基本的方法,製作這樣的功能是很簡單的。 這個例子使用了.NET Framework 的Process 類來獲得啟用進程的資訊,給出了當前啟用進程的列表,並且能夠顯示某一個進程的一些基本資料。製作過程一、運行Visual Studio.NET,建立Visual C#.NET 工程,這裡取名為ProcessInfo。二、在方案總管中, 將Form1.cs 改名為frmProcessInfo.cs(此項為可選)。三、將Form1 的Text 屬性改為Process Information,Font 改為Verdana,9pt(此項為可選)。四、在表單上添加三個控制項:兩個按鈕和一個TextBox。對控制項的屬性進行修改,如下:
控制項 Name屬性 Text屬性
Button1 btnGetProcessList 點擊這裡獲得當前啟用進程列表
Button 2 btnGetProcessByID 獲得指定ID 的進程資訊:
TextBox txtProcessID N/A
調整各控制項的位置,此時使用者介面類似於:

五、進入frmProcessInfo.cs 代碼編輯器。在檔案頭部添加以下一行代碼:

using System.Diagnostics;
【注】System.Diagnostics 命名空間提供特定的類,使您能夠與系統進程、事件記錄和效能計數器進行互動。

六、在frmProcessInfo.cs[設計]中雙擊btnGetProcessList 按鈕。系統自動添加btnGetProcessList_Click 事件。填寫以下代碼到btnGetProcessList_Click 事件中:

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";
}
//Display the process information to the user
System.Windows.Forms.MessageBox.Show(str);
//Default the TextBox value to the first process ID - for the GetByID button
txtProcessID.Text = processes[0].Id.ToString();
【注】 Process 組件提供對正在電腦上啟動並執行進程的訪問。用最簡短的話來說,進程就是當前啟動並執行應用程式。線程是作業系統向其分配處理器時間的基本單位。線程可執行進程的任何一部分代碼,包括當前由另一線程執行的部分。
對於啟動、停止、控制和監視應用程式等任務,Process 組件是很有用的工具。使用Process 組件,可以擷取當前啟動並執行進程的列表,或者啟動新的進程。Process 組件用於訪問系統進程。初始化Process 組件後,可使用該組件來擷取有關當前啟動並執行進程的資訊。此類資訊包括線程集、載入的模組(.dll 和.exe 檔)和效能資訊(如進程當前使用的記憶體量)。
系統進程在系統上由其進程標識符唯一標識。與許多Windows 資源一樣,進程也由其控制代碼標識,而控制代碼在電腦上可能不唯一。控制代碼是表示資源標識符的一般術語。即使進程已退出,作業系統仍保持進程控制代碼,該控制代碼通過Process 組件的Handle 屬性訪問。因此,可以擷取進程的管理資訊,如ExitCode(通常,或者為零表示成功,或者為非零錯誤碼)和ExitTime。控制代碼是非常有價值的資源,所以控制代碼泄漏比記憶體流失危害更大。

七、回到frmProcessInfo.cs[設計]頁,雙擊btnGetProcessByID 按鈕,則IDE自動添加btnGetProcessByID_Click事件在frmProcessInfo.cs
裡。在btnGetProcessByID_Click 事件中,填寫以下代碼:
try
{

string s = "";
System.Int32 processid;
Process process;
//Retrieve the additional information about a specific 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 顯式介面成員實現。

八、主要代碼我們已經填寫完畢。下面使用菜單“產生”>“產生解決方案”命令後,按F5 即可測試程式了。

以下為當前進程列表以及某一個特定ID 進程的基本資料抓圖:  
值得一提的是,Process 類具有很多成員變數,這些成員變數可以獲得進程的幾乎每一個細節。上面的例子中只是簡單地選擇了幾個成員加以示範。如果開發中有需要,可以參考MSDN Library,查詢Process類成員以獲得更詳細的資訊,這裡就不一一列出了。

以上通過一個簡單的例子來說明如何使用.NET Framework 和C#的Process 類來獲得進程的資訊。通過這個例子我們可以看出,C#提供給我們強大和便捷的Process 類,使我們的開發更容易、更方便。這對於編寫高效、快速開發應用程式是非常有協助的。
希望能有更多的朋友提供更好的意見和建議,也歡迎大家分享更多的開發、學習經驗。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.