【问题标题】:c# moving mouse not working without focusc# 移动鼠标没有焦点不起作用
【发布时间】:2014-01-18 23:17:42
【问题描述】:

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

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

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

这是为什么呢?

这是一个使用 BotSuite 的 sn-p。我在此之前开始了一个流程,并将其作为重点。

        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 命令有效。在我的应用程序边界之外单击都不起作用。

【问题讨论】:

  • 你的程序想要点击的“位置”是否有管理员权限,而你的应用程序没有?

标签: c# mouse sendinput


【解决方案1】:

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

从对How can I simulate mouse events from code? 的回答中,我发现SendInput 仅适用于integrity level 少于或相同的程序。

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      • 2014-08-13
      • 2020-08-07
      相关资源
      最近更新 更多