【发布时间】:2017-04-23 02:50:38
【问题描述】:
我写了一个 c++ sn-p 来模拟鼠标点击,如下所示。
INPUT mouseData[2];
ZeroMemory(mouseData, sizeof(mouseData));
mouseData[0].type = INPUT_MOUSE;
mouseData[0].mi.dx = xx;
mouseData[0].mi.dy = yy;
mouseData[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP;
mouseData[0].mi.mouseData = 0;
mouseData[0].mi.time = 0;
mouseData[1].type = INPUT_MOUSE;
mouseData[1].mi.dx = 10;
mouseData[1].mi.dy = 10;
mouseData[1].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP;
mouseData[1].mi.mouseData = 0;
mouseData[1].mi.time = 0;
SendInput(1, &mouseData[0], sizeof(INPUT));
Sleep(30);
SendInput(1, &mouseData[1], sizeof(INPUT));
但是效果不好。 前一个 SendInput 工作,但后一个 SendInput 不工作。 为什么?
另一个:我试过 SendInput 如下
- 为鼠标点击调用 SendInput
- 在屏幕的任意位置手动单击鼠标。
- 调用 SendInput
上面的效果很好。 但是没有2,它就行不通。为什么?
【问题讨论】:
-
这会让任何获得鼠标通知的程序非常感到困惑。不要同时进行,先移动,然后向下,然后向上。
-
您将这些事件放在一个数组中,以便可以原子地处理它们。不要一次发送一个。使用所有事件调用一次 SendInput。您需要为每个不同的操作一个事件。阅读文档。
-
您设置了错误的标志。您确定 Left down 和 Left up 标志可以在单个输入中发送吗?
标签: windows winapi mouseevent