以下是原问题,但是它与Java有关:
在Java中模拟在非活动窗口上的某个位置进行鼠标点击?总之,我正在构建一个后台运行的机器人。这个机器人要求我点击。当然,我希望在机器人运行时能够做其他事情。
所以我想知道是否可以在非活动窗口上的某个位置模拟鼠标点击。
如果可能的话,我会非常感激如果你们中的任何人能够帮助我。
谢谢!
以下是原问题,但是它与Java有关:
在Java中模拟在非活动窗口上的某个位置进行鼠标点击?总之,我正在构建一个后台运行的机器人。这个机器人要求我点击。当然,我希望在机器人运行时能够做其他事情。
所以我想知道是否可以在非活动窗口上的某个位置模拟鼠标点击。
如果可能的话,我会非常感激如果你们中的任何人能够帮助我。
谢谢!
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
public const int MOUSEEVENTF_LEFTDOWN = 0x02;
public const int MOUSEEVENTF_LEFTUP = 0x04;
public const int MOUSEEVENTF_RIGHTDOWN = 0x08;
public const int MOUSEEVENTF_RIGHTUP = 0x10;
//This simulates a left mouse click
public static void LeftMouseClick(Point position)
{
Cursor.Position = position;
mouse_event(MOUSEEVENTF_LEFTDOWN, position.X, position.Y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, position.X, position.Y, 0, 0);
}
编辑:看起来mouse_event
函数已被SendInput()
替换,但它们仍然有效(适用于Windows 7及更早版本)。
mouse_event
非常好,它相当于SendInput
但更容易驱动。 - David HeffernanSendInput
是一个更为通用和灵活的函数, mouse_event
和 keybd_event
保留是为了与旧软件兼容。我认为没有理由停止使用 mouse_event
。你可以向非活动窗口发送Windows消息,并有时成功地伪造输入。然而,在伪造输入之前,我建议先尝试使用 UI 自动化工具。 - David Heffernan
SendInput
,但这需要输入焦点。否则,您将不得不尝试使用PostMessage
。为什么不使用UIAutomation而不是伪造输入? - David Heffernan