プロセス ID からメイン ウィンドウ ハンドルを取得する方法
質問:
方法指定されたプロセス ID からメイン ウィンドウ ハンドルを取得できますか?この特定のウィンドウを最前面に表示したいと考えていますが、Process Explorer はこのアクションをシームレスに実行しているようです。
回答:
決定するために .NET が使用するメカニズムを調査しています。メイン ウィンドウは、EnumWindows() 関数を使用していることを明らかにしました。次の 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 と一致するかどうかを確認します。存在する場合、ウィンドウがメイン ウィンドウ (所有者がなく、表示されている) かどうかをさらに検証し、そのハンドルを返します。
以上がC でプロセス ID からメイン ウィンドウ ハンドルを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。