.NET TIPS

デスクトップ上のすべてのメイン・ウィンドウを列挙するには?

デジタルアドバンテージ
2004/11/19

 デスクトップ上のすべてのメイン・ウィンドウを列挙するには、Win32 APIではEnumWindows関数を利用するが、.NET Frameworkのクラス・ライブラリでは、同等の機能をProcessクラス(System.Diagnostics名前空間)を利用して実現できる。

 具体的には、実行中のすべてのプロセス(Processオブジェクト)を取得して、それぞれのプロセスがメイン・ウィンドウを持っているかどうかをチェックすればよい。

 メイン・ウィンドウの有無は、各プロセスに対して、メイン・ウィンドウのウィンドウ・ハンドル(MainWindowHandleプロパティ)が設定されているかどうかを調べる。もし、MainWindowHandleプロパティの値が「IntPtr.Zero」(=未設定)であれば、そのプロセスはメイン・ウィンドウを持っていないことを意味する。

if (p.MainWindowHandle != IntPtr.Zero) {
  // プロセスpはメイン・ウィンドウを持っている
}

 また、現在実行中のすべてのプロセスは、ProcessクラスのGetProcessesメソッドにより取得できる。

foreach (Process p in Process.GetProcesses()) {
  //現在実行中のプロセスを1つずつ処理
}

 以上の方法を実装した、デスクトップ上のメイン・ウィンドウの一覧を表示するサンプル・プログラムを次に示す。

// enumwin.cs

using System;
using System.Diagnostics;

public class EnumWindows {
  static void Main() {
    foreach (Process p in Process.GetProcesses()) {
      if (p.MainWindowHandle != IntPtr.Zero) {
        Console.WriteLine(p.ProcessName
            + " : " + p.MainWindowTitle);
      }
    }
    // 出力例:
    // vim : VIM - C:\c#\tips\enumwin\enumwin.cs
    // explorer : C:\bin
    // NetCaptor : NetCaptor
    // OUTLOOK : 予定表 - Microsoft Outlook
    // cmd : コマンド プロンプト - enumwin
    // iexplore : @IT:Insider.NET - Microsoft Internet Explorer
  }
}

// コンパイル方法:csc enumwin.cs
デスクトップ上のメイン・ウィンドウ一覧を表示するC#のサンプル・プログラム(enumwin.cs)
 
' enumwin.vb

Imports System
Imports System.Diagnostics

Public Class EnumWin
  Shared Sub Main()
    For Each p As Process In Process.GetProcesses()
      If Not p.MainWindowHandle.Equals(IntPtr.Zero)
        Console.WriteLine(p.ProcessName _
            & " : " & p.MainWindowTitle)
      End If
    Next
    ' 出力例:
    ' vim : VIM - C:\c#\tips\enumwin\enumwin.cs
    ' explorer : C:\bin
    ' NetCaptor : NetCaptor
    ' OUTLOOK : 予定表 - Microsoft Outlook
    ' cmd : コマンド プロンプト - enumwin
    ' iexplore : @IT:Insider.NET - Microsoft Internet Explorer
  End Sub
End Class

' コンパイル方法:vbc /r:System.dll enumwin.vb
デスクトップ上のメイン・ウィンドウ一覧を表示するVB.NETのサンプル・プログラム(enumwin.vb)

 なお、一覧表示に使用しているProcessクラスのProcessNameプロパティはプロセスの名前を、MainWindowTitleプロパティはメイン・ウィンドウのタイトル文字列を取得するためのものである。End of Article

カテゴリ:クラス・ライブラリ 処理対象:ウィンドウ
使用ライブラリ:Processクラス(System.Diagnostics名前空間)
 
この記事と関連性の高い別の.NET TIPS
プロセス情報を名前を基に取得するには?
多重起動禁止時に実行中のWindowsアプリケーションを最前面に表示するには?
外部プログラム実行時に処理が固まる場合には?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH