首页 > 解决方案 > 为什么 user32.dll mouse_event 方法不执行鼠标按下事件?

问题描述

我正在设置一个简单的 C# 应用程序,它将窗口设置为前台并在循环中执行点击。

(几年前我在 Windows 7 上编写了相同的程序。当时一切都运行良好。)我现在在 Windows 10 上工作。

    private const int MOUSEEVENTF_LEFTDOWN = 0x0002;
    private const int MOUSEEVENTF_LEFTUP = 0x0004;
    private const int MOUSEEVENTF_RIGHTDOWN = 0x0008;
    private const int MOUSEEVENTF_RIGHTUP = 0x0010;

    public void DoMouseClick()
    {
        int X = Cursor.Position.X;
        int Y = Cursor.Position.Y;

        mouse_event(MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);
        Thread.Sleep(150);
        mouse_event(MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
    }

除了 MOUSEEVENTF_LEFTDOWN 的第一部分之外,一切似乎都有效。如果我手动按住左键,我可以看到程序在下一步中释放它,即 MOUSEEVENTF_LEFTUP。

我怎样才能使鼠标按下也能执行?

标签: c#clickuser32mousedownmouseup

解决方案


我认为你做 mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) 并使用 SetCursorPos(int x, int y) 与 x 是 Cursor.Position.X 和 y Cursor.Position.Y

int X = Cursor.Position.X;
int Y = Cursor.Position.Y;
SetCursorPos(X, Y);

mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Thread.Sleep(150);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

这对我有用。


推荐阅读