Как я могу имитировать события мыши из кода?
Я хотел бы моделировать события мыши с помощью Win32 API; как мне это сделать?
То, что я хочу сделать, - это симуляция события на самом базовом уровне, уровень, на котором система имеет только тип события и координаты, и еще не определила, к какому окну он должен его передать.
Я не знаю, как это работает. В любом случае, мне нужна помощь в этом. Должен ли я вмешиваться на уровень драйвера?!
Чтобы мои требования были ясными, я не хочу настраивать таргетинг на любое окно, я просто хочу, чтобы система думала, что мышь была нажата или перемещена пользователем. И я буду кодировать в C.
Ответы
Ответ 1
Вы ищете SendInput
функцию, которая позволяет синтезировать мышь
движения и нажатия кнопок в вашем коде, указав массив INPUT
структур, соответствующий входным событиям.
UINT WINAPI SendInput(
__in UINT nInputs, // number of structures in the pInputs array
__in LPINPUT pInputs, // an array of INPUT structures, representing an event
__in int cbSize // the size, in bytes, of an INPUT structure
);
Обратите внимание, однако, что эта функция подвержена изоляции привилегий пользовательского интерфейса (UIPI), что означает, что вашему приложению разрешено вводить вход для приложений, работающих на равном или меньшем уровне целостности.
Ответ 2
Используйте mouse_event
(winuser.h). Следующий код перемещает мышь, а затем выполняет щелчок в новом месте. Вы можете сделать это в двух строках, но это более подробно.
Обратите внимание, что X и Y указаны в mickeys, от 0 до 65535. Затем это отображается на текущее разрешение, то есть 0,0 будет в верхнем левом углу и 65535,65535 будет нижний правый угол.
mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, x, y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);