ホームページ >バックエンド開発 >C++ >C でプロセス ID からメイン ウィンドウ ハンドルを取得するにはどうすればよいですか?

C でプロセス ID からメイン ウィンドウ ハンドルを取得するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-18 16:41:09391ブラウズ

How to Get the Main Window Handle from a Process ID in C  ?

プロセス 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。