我想使用
Vanara.PInvoke
模拟鼠标右键单击。鼠标光标移动正确,但相应的点击输入不起作用。我知道还有其他库可以模拟输入,但我已经在整个项目中广泛使用 Vanara.PInvoke
,并且希望坚持使用该库。我也尝试过在 mouse_event
中使用 User32
;然而,这是一个已弃用的函数,所以我想使用SendInput
。任何帮助将不胜感激。
using Vanara.PInvoke;
public void RightClick(int x, int y)
{
User32.SetCursorPos(x, y);
Thread.Sleep(_random.Next(25, 50));
var mouseDown = new User32.INPUT(User32.MOUSEEVENTF.MOUSEEVENTF_RIGHTDOWN) { type = User32.INPUTTYPE.INPUT_MOUSE };
User32.SendInput(1, new User32.INPUT[] { mouseDown }, Marshal.SizeOf(mouseDown));
Thread.Sleep(_random.Next(25, 50));
var mouseUp = new User32.INPUT(User32.MOUSEEVENTF.MOUSEEVENTF_RIGHTUP) { type = User32.INPUTTYPE.INPUT_MOUSE };
User32.SendInput(1, new User32.INPUT[] { mouseUp }, Marshal.SizeOf(mouseUp));
}
感谢 Simon 确认我的代码在某些用例中有效。在我的特定应用程序中,我必须使用
User32.PostMessage
。
public void RightClick(HWND ptr, int x, int y)
{
User32.SetCursorPos(x, y);
Thread.Sleep(_random.Next(25, 50));
User32.PostMessage(ptr, WindowMessage.WM_LBUTTONDOWN, (IntPtr)1, IntPtr.Zero);
Thread.Sleep(_random.Next(5, 15));
User32.PostMessage(ptr, WindowMessage.WM_LBUTTONUP, IntPtr.Zero, IntPtr.Zero);
}