首页 > 解决方案 > C++ Win API - FindWindow() 或 EnumWindows() 检索特定窗口

问题描述

从特定窗口检索窗口句柄时遇到以下问题(标题和类名已知):

在两个不同的进程下有两个具有不同句柄的相同窗口,但FindWindow()只能从产生的最新窗口中找到句柄,而不是从第一个窗口中找到句柄。

可以用什么代替?可以EnumWindows()用来检索具有相同特征的窗口列表吗?

标签: c++cwinapi

解决方案


使用 Win32 API EnumWindows,然后使用 Win32 API 检查每个窗口属于哪个进程GetWindowThreadProcessId

这是一个示例:

#include <iostream>
#include <Windows.h>
using namespace  std;
BOOL CALLBACK enumProc(HWND hwnd, LPARAM) {
    TCHAR buf[1024]{};

    GetClassName(hwnd, buf, 100);
    if (!lstrcmp(buf, L"Notepad"))
    {
        GetWindowText(hwnd, buf, 100);
        DWORD pid = 0;
        GetWindowThreadProcessId(hwnd, &pid);
        wcout << buf << " " << pid << endl;
    }
    return TRUE;
}

int main() {
    EnumWindows(&enumProc, 0);
}

如果需要查看各个进程的窗口,可以参考这个答案


推荐阅读