我想使用此代码单击某个特定窗口,但它无法正常工作

I want to click in some specific window with this code but it doesn't work properly

本文关键字:常工作 工作 窗口 代码 单击      更新时间:2023-10-16

我想用这段代码点击某个特定的窗口,但是当我尝试编译它时它不起作用,我无法弄清楚这一点,所以需要你们的帮助。

int x = 1555;
int y = 193;
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);

作为注释,您需要添加其他标志:MOUSEEVENTF_ABSOLUTE,另一个标志:MOUSEEVENTF_MOVE。并且您需要将坐标转换为 0 到 65,535 之间的标准化绝对坐标

int x = 1555;
int y = 193;
DWORD fScreenWidth = ::GetSystemMetrics(SM_CXSCREEN) - 1;
DWORD fScreenHeight = ::GetSystemMetrics(SM_CYSCREEN) - 1;
DWORD dx = MulDiv(x,65535,fScreenWidth);
DWORD dy = MulDiv(y,65535,fScreenHeight);
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_MOVE| MOUSEEVENTF_ABSOLUTE, dx, dy, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_MOVE| MOUSEEVENTF_ABSOLUTE, dx, dy, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_MOVE| MOUSEEVENTF_ABSOLUTE, dx, dy, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_MOVE| MOUSEEVENTF_ABSOLUTE, dx, dy, 0, 0);

此外,mouse_event

此函数已被取代。请改用SendInput

int x = 1555;
int y = 193;
DWORD fScreenWidth = ::GetSystemMetrics(SM_CXSCREEN) - 1;
DWORD fScreenHeight = ::GetSystemMetrics(SM_CYSCREEN) - 1;
DWORD dx = MulDiv(x, 65535, fScreenWidth);
DWORD dy = MulDiv(y, 65535, fScreenHeight);
INPUT input[4] = { 0 };
input[0].type = input[1].type = input[2].type = input[3].type = INPUT_MOUSE;
input[0].mi.dx = input[1].mi.dx = input[2].mi.dx = input[3].mi.dx = dx;
input[0].mi.dy = input[1].mi.dy = input[2].mi.dy = input[3].mi.dy = dy;
input[0].mi.dwFlags= input[2].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN| MOUSEEVENTF_MOVE;
input[1].mi.dwFlags = input[3].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP| MOUSEEVENTF_MOVE;
SendInput(4,input,sizeof(INPUT));