【问题标题】:SendInput not work consecutivelySendInput 不能连续工作
【发布时间】: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 如下

  1. 为鼠标点击调用 SendInput
  2. 在屏幕的任意位置手动单击鼠标。
  3. 调用 SendInput

上面的效果很好。 但是没有2,它就行不通。为什么?

【问题讨论】:

  • 这会让任何获得鼠标通知的程序非常感到困惑。不要同时进行,先移动,然后向下,然后向上。
  • 您将这些事件放在一个数组中,以便可以原子地处理它们。不要一次发送一个。使用所有事件调用一次 SendInput。您需要为每个不同的操作一个事件。阅读文档。
  • 您设置了错误的标志。您确定 Left down 和 Left up 标志可以在单个输入中发送吗?

标签: windows winapi mouseevent


【解决方案1】:

MSDN 对its description 的有效标志不是很有帮助

该成员中的位可以是以下值的任意合理组合。

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

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

【讨论】:

    猜你喜欢
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 2021-04-14
    • 1970-01-01
    • 2015-06-06
    相关资源
    最近更新 更多