|
.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プロパティはメイン・ウィンドウのタイトル文字列を取得するためのものである。
カテゴリ:クラス・ライブラリ 処理対象:ウィンドウ
使用ライブラリ:Processクラス(System.Diagnostics名前空間)
|
|
generated by
|
|
Insider.NET 記事ランキング
本日
月間