【问题标题】:I want to click in some specific window with this code but it doesn't work properly [closed]我想使用此代码单击某些特定窗口,但它无法正常工作[关闭]
【发布时间】:2020-06-21 23:06:21
【问题描述】:

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

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,这些数字将被解释为相对于最后报告的位置的米奇。

标签: c++ winapi


【解决方案1】:

作为 cmets,您需要添加其他标志: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));

【讨论】:

  • 整数数学不合适。它从不转动;它只是截断。将截断的结果相乘(如您所提议的那样)只会夸大错误。没有理由回避MulDiv
  • 是的,这是我的错。固定
猜你喜欢
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
  • 2020-11-27
  • 2023-03-20
  • 2021-11-07
  • 1970-01-01
  • 2013-02-10
  • 1970-01-01
相关资源
最近更新 更多