C++ 鼠标单击活动窗口中的特定坐标

C++ 鼠标单击活动窗口中的特定坐标,c++,windows,winapi,windows-10,coordinates,C++,Windows,Winapi,Windows 10,Coordinates,我需要在窗口中的特定元素上执行鼠标单击。我已经计算了系统中该元素的坐标,并编写了一个代码来在该特定坐标上执行鼠标单击 代码对我的机器很有效。但是,如果我在不同的机器上运行,单击操作将在不同的位置执行。这是因为屏幕大小不同。无论窗口大小如何,如何在任何机器中的同一元素上执行鼠标单击。是否有其他方法在屏幕上定位元素?像百分比而不是像素?行吗 RECT rect; GetWindowRect(hwnd, &rect); int x = rect.left; int y = rect.top;

我需要在窗口中的特定元素上执行鼠标单击。我已经计算了系统中该元素的坐标,并编写了一个代码来在该特定坐标上执行鼠标单击

代码对我的机器很有效。但是,如果我在不同的机器上运行,单击操作将在不同的位置执行。这是因为屏幕大小不同。无论窗口大小如何,如何在任何机器中的同一元素上执行鼠标单击。是否有其他方法在屏幕上定位元素?像百分比而不是像素?行吗

RECT rect;
GetWindowRect(hwnd, &rect);
int x = rect.left;
int y = rect.top;
SetCursorPos(x + 570, y + 450);
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

在上面的代码中,我设置了光标相对于系统的位置。对于具有较大屏幕的其他机器,元素的XY坐标不同。任何提示都会有很大帮助。

此元素是标准的Windows UI小部件还是某个第三方UI元素?如果它是第三方的,它可能仍然具有自动化/可访问性支持。@chris它是一个标准的Windows UI元素。确切地说,这是控制面板窗口中打开下一页的链接。该代码是错误的。您需要发送两个事件。一个是给老鼠的。一个给老鼠。您需要使用SendInput,如文档中所述。与其假装输入,不如使用UI自动化。570和450似乎是相当大的值,所以我假设“link”是一个“child”元素。但是,如果子对象本身不是窗口,则应该使用UI自动化。