EnumWindows() を使用してプロセス ID からメイン ウィンドウ ハンドルを取得する
さまざまなシナリオで、プロセス ID に関連付けられたメイン ウィンドウ ハンドルを取得することが必要になります。特定のプロセス ID。これにより、ウィンドウを最前面に表示したり、コントロールを操作したりするなど、ウィンドウの動作を操作できるようになります。
.NET Framework で採用されているアプローチと同様に、EnumWindows() 関数を利用してこれを実現できます。 。実装方法は次のとおりです:
C/C での実装:
struct handle_data { unsigned long process_id; HWND window_handle; }; HWND find_main_window(unsigned long process_id) { handle_data data; data.process_id = process_id; data.window_handle = 0; EnumWindows(enum_windows_callback, (LPARAM)&data); return data.window_handle; } BOOL CALLBACK enum_windows_callback(HWND handle, LPARAM lParam) { handle_data& data = *(handle_data*)lParam; unsigned long process_id = 0; GetWindowThreadProcessId(handle, &process_id); if (data.process_id != process_id || !is_main_window(handle)) { return TRUE; } data.window_handle = handle; return FALSE; } BOOL is_main_window(HWND handle) { return GetWindow(handle, GW_OWNER) == (HWND)0 && IsWindowVisible(handle); }
このコードは、プロセス ID とプロセス ID の両方を保存するヘルパー構造体 handle_data を定義します。ウィンドウハンドル。 find_main_window() 関数は、EnumWindows() を使用してすべてのトップレベル ウィンドウを列挙し、各ウィンドウに関連付けられたプロセス ID を確認し、is_main_window() 関数を使用してメイン ウィンドウではないウィンドウを除外します。メイン ウィンドウが見つかった場合、コードはそのハンドルを handle_data 構造体に保存して返します。
このアプローチに従うことで、プロセス ID からメイン ウィンドウ ハンドルを取得でき、その外観や外観を制御できるようになります。必要に応じて動作します。
以上がEnumWindows() を使用してプロセス ID からメイン ウィンドウ ハンドルを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。