所以我正在开发一个程序,它可以检测到一个标题的窗口名称,它会不断地改变我当前使用的标题Gamebar-592d22(master)中的6个字符:
Hwnd hwnd = FindWindowA(NULL, WindowTitle);
我通过hwnd发送鼠标输入。
发布于 2020-10-27 12:49:38
你不能使用FindWindow()
来做这件事。请改用EnumWindows()
。在enum callback中,使用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
将信息传递给回调。例如:
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));
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));
https://stackoverflow.com/questions/64548435
复制相似问题