2017-04-22 58 views
0

我写了一个C++代码片段来模拟鼠标点击,如下所示。SendInput不能连续工作

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

以上工作正常。 但没有2,它不起作用。为什么?

+0

对于任何获取鼠标通知的程序来说,这会非常令人困惑。不要同时做所有事情,先移动,然后移动,然后移动。 –

+0

您可以将这些事件放入数组中,以便它们可以以原子方式处理。不要一次发送一个。一次调用SendInput处理所有事件。每个不同的行动你都需要一个事件。阅读文档。 –

+0

您正在设置错误的标志。你确定左边向下和左边的标志可以在单个输入中发送吗? – SMUsamaShah

回答

2

MSDN不在有效标志的its description超级有用

在该构件中的位可以是以下值中的任何合理的组合。

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

如果你要做大量的鼠标操作,我会建议你创建一个帮助函数来执行这三个输入步骤。