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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-08 14:51:11195ブラウズ

How to Get the Main Window Handle Using a Process ID?

プロセス ID を使用してメイン ウィンドウ ハンドルを取得する方法:

プロセスのメイン ウィンドウ ハンドルを取得するには、次の方法を使用できます。手順:

  1. EnumWindows() 関数を使用して、すべてのトップレベル ウィンドウを列挙します。
  2. コールバック関数 enum_windows_callback() 内で、現在のウィンドウに関連付けられたプロセス ID がターゲット プロセス ID と一致するかどうかを確認します。
  3. 一致が見つかった場合は、現在のウィンドウかどうかを判断します。所有者が存在せず (GetWindow(handle, GW_OWNER) == (HWND)0)、表示されていることを確認することにより、メイン ウィンドウであることを確認します。 (IsWindowVisible(handle) == TRUE)。
  4. メイン ウィンドウを識別したら、そのハンドルを handle_data 構造体に保存し、FALSE を返して列挙を停止します。

コード例は次のとおりです。次の手順を実装します:

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 を使用してメイン ウィンドウ ハンドルを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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