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

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

Barbara Streisand
Barbara Streisandオリジナル
2024-12-11 19:34:12490ブラウズ

How Can I Get a Main Window Handle from a Process ID in .NET and C  ?

プロセス ID からメイン ウィンドウ ハンドルを取得する

特定のウィンドウを最前面に表示することを追求し、そのウィンドウ ハンドルを取得する方法を理解するプロセス ID からのメイン ウィンドウ ハンドルが重要です。このプロセスは通常、ウィンドウを管理し、ウィンドウをフォーカスするために使用されます。

.NET と EnumWindows() を使用したソリューション

EnumWindows() を利用する .NET 実装が存在します。メインウィンドウを識別します。この関数はシステム内のすべてのトップレベル ウィンドウを列挙し、特定のプロセスに関連付けられたウィンドウを見つけることができます。

C でのコード実装

C コードは次のとおりです。 .NET 実装と同じアプローチを示すスニペット:

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 構造体に保存されます。

このコールバック関数で EnumWindows() を呼び出すことにより、すべてのトップレベル ウィンドウを反復処理し、メイン ウィンドウを識別できます。指定されたプロセス ID のウィンドウを開き、そのハンドルを取得します。このハンドルを使用して、ウィンドウを最前面に移動したり、他のウィンドウ関連の操作を実行したりできます。

以上が.NET および C でプロセス ID からメイン ウィンドウ ハンドルを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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