使用 Vanara PInvoke SendInput 模拟右键单击

问题描述 投票:0回答:1

我想使用

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));
}
c# pinvoke
1个回答
0
投票

感谢 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);
}
© www.soinside.com 2019 - 2024. All rights reserved.