2009年3月23日月曜日

C#でアクティブウィンドウの取得

アクティブウィンドウを取得する方法
アクティブプロセスからウィンドウハンドルを取得する。
直接アクティブウィンドウを取得する.NET FrameWorkのクラス(関数)は無いみたい。

Win32APIを使っての取得方法を紹介。
以下のクラス(関数)を使ってアクティブプロセスを取得し、
取得したプロセスのProcess.MainWindowHandle でウィンドウハンドルを取得します。

---------------
/// Win32API の extern 宣言クラス
public class WinAPI {
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();

[DllImport("user32.dll")]
public static extern int GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);
}

public class sample {
///


/// アクティブなプロセスを取得する
///

/// アクティブプロセス
public static Process GetActiveProcess()
{
// アクティブなウィンドウハンドルの取得
IntPtr hWnd = WinAPI.GetForegroundWindow();
int id;
// ウィンドウハンドルからプロセスIDを取得
WinAPI.GetWindowThreadProcessId(hWnd, out id);
Process process = Process.GetProcessById(id)
return process;
}
}
---------------

取得したウィンドウハンドルとWin32APIを使って、
様々なプロセスに対しての操作が可能となります。

.

1 件のコメント:

Unknown さんのコメント...

アクティブウィンドウの取得が出来ずに困っている所でした。
おかげさまで無事問題が解決出来ました。ありがとうございました。

ラベル