0

我想在我的应用程序之外移动鼠标并模拟鼠标点击。

我已经尝试了所有可能的方式来移动鼠标、sendinput、包括 BotSuite 和 Input Simulator 在内的大量库。

每次我的应用程序失去焦点时,它都不会移动鼠标,也不会单击。我可以移动鼠标,然后在我的应用程序内部单击,但是一旦我失去焦点,它就会完全停止工作。我也不能点击我的应用程序之外的任何东西,即使在对焦时也是如此。

这是为什么?

这是使用 BotSuite 的片段。我在此之前开始了一个过程,并将其作为重点。

        Bitmap CapturedScreen = ScreenShot.Create(LauncherHandle);
        Bitmap bmpRefPic = new Bitmap("launchbutton.png");
        ImageData refpic = new ImageData(bmpRefPic);
        ImageData source = new ImageData(CapturedScreen);

        List<Rectangle> found = new List<Rectangle>();

        found = Template.AllImages(source, refpic, 124);

        Mouse.MoveRelativeToWindow(LauncherHandle, found[0].X + 50, found[0].Y + 50, true, 100);

        Mouse.LeftClick();

这是行不通的。但是,如果我事先在自己的应用程序上执行 SetForegroundWindow,则 Mouse.Move 命令有效。在我的应用程序边界之外单击都不起作用。

4

2 回答 2

2

SendInput 将消息放入前台窗口的消息队列中。因此,如果您的应用程序是前台窗口,则 SendInput 会将消息放入应用程序的消息队列中。

要在另一个应用程序中伪造输入,您需要:

  1. 使前台窗口成为其他应用程序中的窗口。
  2. 使用 PostMessage 将输入消息直接发布到目标窗口。

选项 2 并不总是按您的预期工作,因为输入消息可能具有相当复杂的处理。对于鼠标消息,与键消息相比,这不太可能成为问题。

也许使用自动化 API 会更简单。

于 2014-01-01T09:37:35.580 回答
0

我不确定这是否是同一个问题,但这是我想做的以及如何解决它:

来自如何从代码中模拟鼠标事件的答案?我已经看到它SendInput仅适用于与您的应用程序相比更少或相同integrity level的程序。

我想自动登录游戏。该游戏需要以管理员身份启动一些 HackShield 或其他东西。我想知道为什么我的 SendInput 在 Firefox 上有效(针对键盘事件进行了测试),但在该游戏上无效。

当我关注我的应用程序时,选择了屏幕的右侧区域,鼠标移动到该位置,但游戏没有获得焦点。如果我手动聚焦游戏,应用程序会计算出正确的点击区域,但鼠标移动和点击都没有执行。

也以管理员身份启动我的应用程序,解决了问题,一切都像魅力一样工作 =)

希望这对其他人也有帮助!

于 2014-09-23T10:35:12.720 回答