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

EnumWindows() を使用してプロセス ID からメイン ウィンドウ ハンドルを取得するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-15 19:50:16
オリジナル
132 人が閲覧しました

How to Retrieve a Main Window Handle from its Process ID using EnumWindows()?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート