繁体   English   中英

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

[英]Window title C++ how to get the name of a randomizing title

所以我正在开发一个程序来检测标题的窗口名称,该标题的窗口名称不断更改我目前使用的标题 Gamebar-592d22(master) 中的 6 个字符:

Hwnd hwnd = FindWindowA(NULL, WindowTitle);

我通过 hwnd 发送鼠标输入。

您将无法为此使用FindWindow() 请改用EnumWindows() 枚举回调中,使用GetWindowText()获取提供的HWND的标题,检查它是否与您感兴趣的模式匹配,如果匹配,则根据需要使用HWND ,例如:

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()退出时发送消息:
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传递鼠标坐标,然后在找到匹配窗口时从回调中发送消息:
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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM