Почему метод user32.dll mouse_event не выполняет событие нажатия мыши? - PullRequest
0 голосов
/ 27 марта 2019

Я настраиваю простое приложение на 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.

Как сделать так, чтобы мышь также работала?

1 Ответ

0 голосов
/ 29 марта 2019

Я думаю, что вы делаете 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);

Это сработало для меня.

...