FindWindow多个同名窗口或不确定窗口名如何寻找?

参考:

[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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值