|
.NET TIPS
プロセス情報を名前を基に取得するには?[C#、VB]
デジタルアドバンテージ 一色 政彦
2008/03/27 |
 |
|
現在実行中のアプリケーションのプロセスに関する情報(例えば、「ファイル・パス名」や、Windowsタスク・バーなどに表示される「ウィンドウ・タイトル名」などの情報)を取得したい場合、「TIPS:デスクトップ上のすべてのメイン・ウィンドウを列挙するには?」で紹介した方法によってすべてのプロセスを列挙して取得することができるが、そのほかに、プロセスの表示名(以降、プロセス名)をキーに取得することもできる。
なお、ここでいうプロセス名とは、ファイル・パス名のうち、「パス部分」(例:C:\WINDOWS\system32\)や「拡張子“.exe”」を含まないファイル名のことで、例えばメモ帳(ファイル・パス名は「C:\WINDOWS\system32\notepad.exe」)であれば「notepad」がプロセス名である。
プロセス名を基にプロセス情報を取得するには、Processクラス(System.Diagnostics名前空間)の静的メソッドGetProcessesByNameを呼び出せばよい。Process.GetProcessesByNameメソッドは、パラメータにプロセス名を文字列で受け取り、戻り値でProcessオブジェクトの配列を返す。配列なのは、そのプロセス名のプロセスが1つとは限らないからだ。
次のコンソール・アプリケーションのサンプル・コードは、Process.GetProcessesByNameメソッドを使ってProcessオブジェクトの配列を取得し、それぞれのProcessオブジェクトのファイル・パス名をコンソール出力している。
using System;
using System.Diagnostics;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string ProcessName = "notepad";
Process[] allProcesses =
Process.GetProcessesByName(ProcessName);
foreach (Process oneProcess in allProcesses)
{
Console.WriteLine("ファイル・パス名:"
+ oneProcess.MainModule.FileName);
// 出力例:
// ファイル・パス名:C:\WINDOWS\system32\notepad.exe
}
}
}
} |
Imports System.Diagnostics
Module Module1
Sub Main()
Dim ProcessName As String = "notepad"
Dim allProcesses() As Process = _
Process.GetProcessesByName(ProcessName)
For Each oneProcess As Process In allProcesses
Console.WriteLine("ファイル・パス名:" _
& oneProcess.MainModule.FileName)
' 出力例:
' ファイル・パス名:C:\WINDOWS\system32\notepad.exe
Next
End Sub
End Module |
|
プロセス名をキーにプロセス情報を取得するサンプル・コード(上:C#、下:VB) |
プロセスのファイル・パス名は、ProcessオブジェクトのMainModuleプロパティから取得したProcessModuleクラス(System.Diagnostics名前空間)のオブジェクトのFileNameプロパティから取得できる。
またWindowsアプリケーションのプロセスに対しては、MainWindowHandleプロパティからメイン・ウィンドウのウィンドウ・ハンドルを取得できる。
カテゴリ:Windowsフォーム 処理対象:スレッド
使用ライブラリ:Processクラス(System.Diagnostics名前空間)
使用ライブラリ:ProcessModuleクラス(System.Diagnostics名前空間)
関連TIPS:デスクトップ上のすべてのメイン・ウィンドウを列挙するには? |
|
generated by
|
|
Insider.NET 記事ランキング
本日
月間