ProcessクラスのGetProcessesメソッドを使ってローカルコンピュータ上(リモートコンピュータも可能)で実行されているすべてのプロセスを取得できます。
次の例ではローカルコンピュータ上で実行されているすべてのプロセスを取得し、そのプロセス名などを列挙しています。
'ローカルコンピュータ上で実行されているすべてのプロセスを取得 Dim ps As System.Diagnostics.Process() = System.Diagnostics.Process.GetProcesses() '"machinename"という名前のコンピュータで実行されている 'すべてのプロセスを取得するには次のようにする。 'Dim ps As System.Diagnostics.Process() = _ ' System.Diagnostics.Process.GetProcesses("machinename") '配列から1つずつ取り出す For Each p As System.Diagnostics.Process In ps Try 'プロセス名を出力する Console.WriteLine("プロセス名: {0}", p.ProcessName) 'ID Console.WriteLine("ID: {0}", p.Id) 'メインモジュールのパス Console.WriteLine("ファイル名: {0}", p.MainModule.FileName) '合計プロセッサ時間 Console.WriteLine("合計プロセッサ時間: {0}", p.TotalProcessorTime) '物理メモリ使用量 Console.WriteLine("物理メモリ使用量: {0}", p.WorkingSet64) '.NET Framework 1.1以前では次のようにする 'Console.WriteLine("物理メモリ使用量: {0}", p.WorkingSet) Console.WriteLine() Catch ex As Exception Console.WriteLine("エラー: {0}", ex.Message) End Try Next
//ローカルコンピュータ上で実行されているすべてのプロセスを取得 System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcesses(); //"machinename"という名前のコンピュータで実行されている //すべてのプロセスを取得するには次のようにする。 //System.Diagnostics.Process[] ps = // System.Diagnostics.Process.GetProcesses("machinename"); //配列から1つずつ取り出す foreach (System.Diagnostics.Process p in ps) { try { //プロセス名を出力する Console.WriteLine("プロセス名: {0}", p.ProcessName); //ID Console.WriteLine("ID: {0}", p.Id); //メインモジュールのパス Console.WriteLine("ファイル名: {0}", p.MainModule.FileName); //合計プロセッサ時間 Console.WriteLine("合計プロセッサ時間: {0}", p.TotalProcessorTime); //物理メモリ使用量 Console.WriteLine("物理メモリ使用量: {0}", p.WorkingSet64); //.NET Framework 1.1以前では次のようにする //Console.WriteLine("物理メモリ使用量: {0}", p.WorkingSet); Console.WriteLine(); } catch (Exception ex) { Console.WriteLine("エラー: {0}", ex.Message); } }
このコードは、64ビット環境で実行すると、Process.MainModuleプロパティを呼び出す箇所で、エラーが発生(例外Win32Exceptionをスロー)します。これを防ぐには、プラットフォームターゲットを「Any CPU」か「x64」にするか、下で紹介する方法を使います。
WMIのWin32_Processクラスを使ってもすべてのプロセスを取得できます。
WMIはWindows 2000以上のOSで使用できます。また、以下のサンプルではSystem.Management.dllを参照設定に追加する必要があります。
Dim mc As New System.Management.ManagementClass("Win32_Process") Dim moc As System.Management.ManagementObjectCollection = mc.GetInstances() Dim mo As System.Management.ManagementObject For Each mo In moc Console.WriteLine("プロセス名:{0}", mo("Name")) Console.WriteLine("プロセスID:{0}", mo("ProcessId")) Console.WriteLine("ファイル名:{0}", mo("ExecutablePath")) mo.Dispose() Next moc.Dispose() mc.Dispose()
System.Management.ManagementClass mc = new System.Management.ManagementClass("Win32_Process"); System.Management.ManagementObjectCollection moc = mc.GetInstances(); foreach (System.Management.ManagementObject mo in moc) { Console.WriteLine("プロセス名:{0}", mo["Name"]); Console.WriteLine("プロセスID:{0}", mo["ProcessId"]); Console.WriteLine("ファイル名:{0}", mo["ExecutablePath"]); mo.Dispose(); } moc.Dispose(); mc.Dispose();