簡體   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