参考:
[C++]FindWindow,多个窗口名字一致_c++findwindow-CSDN博客
EnumWindows 函数 (winuser.h)-CSDN博客
第一种方案
使用FindWindowEx函数
FindWindowExA 函数 (winuser.h) - Win32 apps | Microsoft Learn
此函数的第二个参数,可传入同名的窗口句柄,下一次寻找从下一个窗口开始。
示例代码:
HWND findTargetWindow(char *name)
{
HWND hWnd = NULL;
char titleName[256] = {0};
hWnd = FindWindow("类名", NULL);
while (hWnd!=NULL)
{
GetWindowTextA(hWnd, titleName, 256); // 获取窗口标题
if (strstr(titleName, "可能窗口名1") || strstr(titleName, "可能窗口名2"))
{
break;
}
hWnd = FindWindowEx(NULL, hWnd, "类名", NULL);//下一次寻找
}
return hWnd;
}
第二种方案
使用EnumWindows函数,遍历当前所有窗口
enumWindows 函数 (winuser.h) - Win32 apps | Microsoft Learn
示例代码:
MyEnumWindowsProc(HWND hwnd, LPARAM lparam)
{
char titleName[256] = {0};
char className[256] = {0};
GetWindowTextA(hwnd, titleName, 256); // 获取窗口标题
GetClassNameA(hwnd, className, 256); // 获取窗口类名
if (strstr(className, "类名") == NULL)
{
return FALSE;
}
if (strstr(titleName, "可能窗口名1") || strstr(titleName, "可能窗口名2"))
{
g_hwnd = hwnd;
return TRUE;
}
return FALSE;
}
HWND enumTargetWindow(char *name)
{
EnumWindows(MyEnumWindowsProc, 0);
return g_hwnd;
}