DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

グラフィカルインターフェイスがあるプロセスを探す

.NET Frameworkには残念ながらウィンドウを探す(列挙する)方法が用意されていません。Win32 APIを使わないでどうにかできないものかと、苦し紛れで考えられたのがプロセスのMainWindowHandleプロパティを調べ、プロセスに関連付けられたメインウィンドウがあるか調べる方法です。つまりこの方法では、メインウィンドウしか列挙できません。

役に立つかは分かりませんが、下記にその例を示します。

補足:Windows 98では、ProcessStartInfo.UseShellExecuteにTrueを設定して開始したプロセスにはMainWindowHandleプロパティは使えないそうです。
VB.NET
コードを隠すコードを選択
Dim p As System.Diagnostics.Process
For Each p In System.Diagnostics.Process.GetProcesses()
    'MainWindowHandleがゼロでないプロセスを探す
    If Not IntPtr.Zero.Equals(p.MainWindowHandle) Then
        'プロセス名とウィンドウタイトルを表示する
        Console.WriteLine("{0}:{1}", p.ProcessName, p.MainWindowTitle)
    End If
Next
C#
コードを隠すコードを選択
foreach (System.Diagnostics.Process p
    in System.Diagnostics.Process.GetProcesses())
{
    //MainWindowHandleがゼロでないプロセスを探す
    if (!IntPtr.Zero.Equals(p.MainWindowHandle))
    {
        //プロセス名とウィンドウタイトルを表示する
        Console.WriteLine("{0}:{1}", p.ProcessName, p.MainWindowTitle);
    }
}

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。