使用SendInput进行鼠标模拟

时间:2018-12-10 01:02:32

标签: c# mouse simulation sendinput

我申请了一些自动处理程序。
它在C#中使用了SendInput
我在PC上测试了该代码,效果很好。
但是现在我在其他PC上安装了该应用,但无法正常运行。
我附上了一些代码片段以供理解。

    public static void ClickLeftMouseButton()
    {
        INPUT mouseDownInput = new INPUT();
        mouseDownInput.type = SendInputEventType.InputMouse;
        mouseDownInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_LEFTDOWN;
        SendInput(1, ref mouseDownInput, Marshal.SizeOf(new INPUT()));

        INPUT mouseUpInput = new INPUT();
        mouseUpInput.type = SendInputEventType.InputMouse;
        mouseUpInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_LEFTUP;
        SendInput(1, ref mouseUpInput, Marshal.SizeOf(new INPUT()));
    }
    public static void ClickRightMouseButton()
    {
        INPUT mouseDownInput = new INPUT();
        mouseDownInput.type = SendInputEventType.InputMouse;
        mouseDownInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_RIGHTDOWN;
        SendInput(1, ref mouseDownInput, Marshal.SizeOf(new INPUT()));

        INPUT mouseUpInput = new INPUT();
        mouseUpInput.type = SendInputEventType.InputMouse;
        mouseUpInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_RIGHTUP;
        SendInput(1, ref mouseUpInput, Marshal.SizeOf(new INPUT()));
    }

    public static void SetMousePosition(int x, int y, int width, int height)
    {
        INPUT mouseMoveInput = new INPUT();
        mouseMoveInput.type = SendInputEventType.InputMouse;

        mouseMoveInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_MOVE | MouseEventFlags.MOUSEEVENTF_ABSOLUTE;

        mouseMoveInput.mkhi.mi.dx = 65535 * x / width;
        mouseMoveInput.mkhi.mi.dy = 65535 * y / height;

        SendInput(1, ref mouseMoveInput, Marshal.SizeOf(new INPUT()));
    }

从代码片段中可以看到,我调用了2个函数。

    MouseSimulator.SetMousePosition(Convert.ToInt16(mAction.x_pos), Convert.ToInt16(mAction.y_pos), 1920, 1080);
    MouseSimulator.ClickLeftMouseButton();

但是在另一台PC上,它不起作用。
我只能通过Chrome RDP或TeamViewer访问该PC。
我发布了我的应用程序,并在该PC上安装了该软件包。
但是SendInput不起作用。
我该怎么办?
两台PC(我的和其他)的Windows操作系统都是Win10。

1 个答案:

答案 0 :(得分:0)

要执行SendInput,需要具有管理员权限。