我正在构建一个使用mouse_event
模拟左键点击的.Net 4.0应用程序(使用Winforms)(我知道{@ 1}}已被弃用,但是当我使用mouse_event
时会出现此问题,同样)。
结合模拟的左键单击,我还在应用程序中设置了光标位置(我已尝试SendMessage
...,以及Cursor.Position
)。
问题在于时机。我将调用设置光标位置,稍后在代码中,我调用左键单击。但通常情况下,这些操作的顺序会发生故障(左键单击会在导航之前发生)。我试图通过插入各种暂停(SetCursorPosition()
,在System.Threading.Thread.Sleep()
对象中包装动作等)来纠正这个问题。
这些解决方案都不起作用,我确信我对Windows消息传递如何工作缺乏了解正在这个问题中发挥作用。
所以,我的伪代码看起来像这样:
Task
在上面的示例中,事件将不按顺序发生,其中2个导航调用首先发生,然后发生2 navigate(x_pos, y_pos);
leftClick(); ///using mouse_event()
navigate(x_pos2, y_pos2);
leftClick();
次调用。
对于mouse_event(leftClick),我基本上使用:
leftClick()
...然后我使用0x02(鼠标向下)和0x04(鼠标向上)调用来模拟左键单击用于设置光标位置,我尝试了WinAPI调用,以及简单地使用
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);