SendInput不能连续工作

时间:2017-04-22 16:55:46

标签: windows winapi mouseevent

我已编写了一个c ++代码片段来模拟鼠标点击,如下所示。

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,如下所示

  1. 调用SendInput鼠标单击
  2. 在屏幕的任何位置手动点击鼠标。
  3. 调用SendInput
  4. 以上效果很好。 但如果没有2,它就无法运作。为什么呢?

1 个答案:

答案 0 :(得分:2)

MSDN在its description有效标志

中没有超级帮助
  

此成员中的位可以是以下值的任何合理组合。

我个人不会说在同一输入命令中同时使用向下和向上标志是合理的。为了最大限度地兼容所有应用程序,请像普通用户一样执行操作:移动,按下按钮,最后按下按钮。

我建议您创建一个辅助函数,如果要进行大量鼠标操作,则执行这三个输入步骤。