【解決方法】プロセス ID から複数のウィンドウ ハンドルを見つける方法


たとえば、プログラムが単一のプロセスから複数のウィンドウを使用する場合、単一の PID (プロセス ID) に関連付けられたすべてのウィンドウ ハンドルを検索して列挙するにはどうすればよいでしょうか。

私が試したこと:

この質問に対する答えであると思われるものを (コード プロジェクト コミュニティの利益のために) 公開しました。 より良い回答を自由に公開してください。

解決策 1

次のコードは、指定された PID ごとにすべてのウィンドウのハンドルを見つけます。

#include <vector>
#include <Windows.h>

void GetAllWindowsFromProcessID(DWORD dwProcessID, std::vector<HWND>& vhWnds)
{
    // find all hWnds (vhWnds) associated with a process id (dwProcessID)
    HWND hCurWnd = NULL;
    do
    {
        hCurWnd = FindWindowEx(NULL, hCurWnd, NULL, NULL);
        if (hCurWnd != NULL)
        {
            DWORD curProcessID = 0;
            GetWindowThreadProcessId(hCurWnd, &curProcessID);
            if (curProcessID == dwProcessID)
            {
                vhWnds.push_back(hCurWnd);  // add the found hCurWnd to the vector
                // Optional: Uncomment the next line for debugging output
                // wprintf(L"Found hWnd %d\n", (int)hCurWnd);
            }
        }
    } while (hCurWnd != NULL);
}

解決策 2

上記のコードでは、メイン変数から関数に渡されるパラメーターと関数内のローカル変数の両方に同じ名前が付いています。
つまり、DWORD dwProcessID = 0;

これにより、すべてのプロセスのすべてのウィンドウが列挙されます。

ローカル変数名を別の名前に変更し、それを GetWindowThreadProcessId() 関数と比較でも使用します。

コメント

タイトルとURLをコピーしました