为什么user32.dll mouse_event方法不执行鼠标按下事件?

时间:2019-03-27 15:56:44

标签: c# click user32 mousedown mouseup

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

(几年前我在Windows上编写了相同的程序。那时候一切运行良好。) 我正在使用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。

我怎样才能使鼠标按下的效果也一样?

2 个答案:

答案 0 :(得分:0)

我认为您执行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);

这对我有用。

答案 1 :(得分:0)

Windows 10 有错误,无法在某些软件上运行 MOUSEEVENTF_LEFTDOWN