首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >窗口标题C++如何获取随机化标题的名称

窗口标题C++如何获取随机化标题的名称
EN

Stack Overflow用户
提问于 2020-10-27 12:44:10
回答 1查看 64关注 0票数 1

所以我正在开发一个程序,它可以检测到一个标题的窗口名称,它会不断地改变我当前使用的标题Gamebar-592d22(master)中的6个字符:

代码语言:javascript
运行
复制
Hwnd hwnd = FindWindowA(NULL, WindowTitle);

我通过hwnd发送鼠标输入。

EN

回答 1

Stack Overflow用户

发布于 2020-10-27 12:49:38

你不能使用FindWindow()来做这件事。请改用EnumWindows()。在enum callback中,使用GetWindowText()获取提供的HWND的标题,检查它是否与您感兴趣的模式匹配,如果匹配,则根据需要使用HWND,例如:

代码语言:javascript
运行
复制
BOOL CALLBACK MyEnumWindowsProc(HWND hwnd, LPARAM lParam)
{
    char title[24] = {0};
    GetWindowTextA(hwnd, title, 23);
    int num;
    if (sscanf(title, "Gamebar-%6x(master)", &num) == 1)
    {
        // use hwnd and lParam as needed... 
    }
    return TRUE;
}

EnumWindows(&MyEnumWindowsProc, ...);

更新:例如,给定您关于向找到的窗口内的坐标发送鼠标消息的注释,您可以使用回调的LPARAM将信息传递给回调。例如:

  1. 您可以在LPARAM中传递HWND变量的地址,如果找到匹配的窗口,则将其HWND分配给该变量,然后可以在EnumWindows()退出时发送消息:

代码语言:javascript
运行
复制
BOOL CALLBACK FindGamebarWnd(HWND hwnd, LPARAM lParam)
{
    char title[24] = {0};
    GetWindowTextA(hwnd, title, 23);
    int num;
    if (sscanf(title, "Gamebar-%6x(master)", &num) == 1)
    {
        *reinterpret_cast<HWND*>(lParam) = hwnd;
        return FALSE;
    }
    return TRUE;
}

HWND hwnd = NULL;
EnumWindows(&FindGamebarWnd, reinterpret_cast<LPARAM>(&hwnd));
if (hwnd)
    SendMessage(hwnd, WM_LBUTTONUP, 0, MAKELPARAM(pt.x, pt.y)); 

  1. 您可以在LPARAM中传递鼠标坐标,然后在找到匹配窗口时在回调中发送消息:

代码语言:javascript
运行
复制
BOOL CALLBACK ClickGamebarWnd(HWND hwnd, LPARAM lParam)
{
    char title[24] = {0};
    GetWindowTextA(hwnd, title, 23);
    int num;
    if (sscanf(title, "Gamebar-%6x(master)", &num) == 1)
    {
        SendMessage(hwnd, WM_LBUTTONUP, 0, lParam); 
        return FALSE;
    }
    return TRUE;
}

EnumWindows(&ClickGamebarWnd, MAKELPARAM(pt.x, pt.y));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64548435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档