【发布时间】:2017-03-25 00:02:13
【问题描述】:
我正在尝试以编程方式模拟鼠标左键单击:
[DllImport("user32.dll")]
static extern bool SetCursorPos(int x, int y);
[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 static void LeftMouseClick(int xpos, int ypos)
{
SetCursorPos(xpos, ypos);
mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0);
System.Threading.Thread.Sleep(1000);
mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0);
}
光标移动到屏幕上的适当位置,但点击并未在此处触发。有什么想法吗?
编辑:我做了几个测试。我使用的方法似乎不是问题(它成功点击了蒸汽、Skype 等应用程序)。当光标位于我特别想要单击的应用程序(android 模拟器)上方时调用 click 方法时,没有任何反应。鼠标光标移动到该位置但不会点击...现在要测试另一个模拟器。
【问题讨论】:
-
您是否可能不应该发送
ORd 事件?我认为上升和下降会发生在不同的时间 -
@BradleyDotNET 我将它编辑为不同的事件,它仍然没有触发。
-
事件被注入到有焦点的线程的队列中。那是哪个节目?伪造输入可能不是您实际问题的解决方案。即使你是打算用 SendInput 来做的。您没有阅读文档吗?
-
@DavidHeffernan 我认为您正在做某事。有焦点的程序是我的应用程序,而不是我要点击的应用程序。所以我需要事先将焦点设置到我想点击的应用程序上?