Почему user32.dll метод mouse_event не выполняет событие mouse down?

#c# #click #user32 #mousedown #mouseup

#c# #щелкните #пользователь32 #mousedown #mouseup

Вопрос:

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

Как я могу заставить mouse down также выполняться?

Ответ №1:

Я думаю, вы выполняете mouse_event (MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) и используете SetCursorPos (int x, int y), где x является курсором.Положение.Курсор X и y.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);
  

У меня это сработало.

Ответ №2:

В Windows 10 есть ошибка, не удается запустить MOUSEEVENTF_LEFTDOWN на каком-то программном обеспечении.