我想移动鼠标并在我的应用程序之外模拟鼠标点击。
我已经尝试了一切可能的方法来移动鼠标,sendinput,大量的库,包括BotSuite和输入模拟器。
每当我的应用程序失去焦点时,它不会移动鼠标,也不会点击。 我可以移动鼠标,然后在我的应用程序中单击,但是一旦我失去焦点,它就会完全停止工作。即使在聚焦时,我也无法点击我的应用程序之外的任何内容。
为什么?
这是使用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命令可以正常工作。单击在我的应用程序边界之外的任何方式都不起作用。
答案 0 :(得分:2)
SendInput将消息放入前台窗口的消息队列中。因此,如果您的应用程序是前台窗口,则SendInput会将消息放入应用程序的消息队列中。
要伪造其他应用程序中的输入,您需要:
选项2并不总是按预期工作,因为输入消息可能具有相当复杂的处理方式。对于鼠标消息,这不是关键消息的问题。
使用自动化API可能更简单。
答案 1 :(得分:0)
我不确定这是否是同一个问题,但这是我想做的以及如何解决它:
从How can I simulate mouse events from code?回答我发现SendInput
仅适用于比您的应用程序少或相同integrity level
的程序。
我想自动登录游戏。对于某些HackShield或某些东西,该游戏需要作为管理员启动。我想知道为什么我的SendInput在Firefox上工作(测试键盘事件),但不在那个游戏上。
当我关注我的应用程序时,选择了屏幕右侧区域,鼠标移动到该位置,但游戏没有获得焦点。 如果我手动聚焦游戏,应用程序会计算出正确的区域以进行单击,但不会执行鼠标移动和点击。
以管理员身份启动我的应用程序,解决了问题,一切都像魅力一样工作=)
希望这也可以帮助其他人!