Qt - С++ имитирует нажатие клавиши

Я пытаюсь создать простого бота в Qt, и для этого мне нужен способ имитации нажатия клавиатуры ВНЕ самого приложения Qt.

Я успешно сделал это возможным, используя «старый» keybd_event

keybd_event(Qt::Key_A,0,0, 0); // Pressing the 'A-button"

и это прекрасно работает. Но я не могу сделать это, когда пытаюсь выполнить команду «выбрать все», для которой требуется одновременное нажатие двух кнопок.

Когда я исследовал проблему в Google, меня направили на «SendInput" с сообщением "Эта функция (keybd_event) была заменена. Вместо этого используйте SendInput».

Проблема сейчас в том, что я мало разбираюсь в Windows API и особенно в контексте «Qt», и хотел бы получить руководство о том, как начать работу.


person Alexander    schedule 21.01.2012    source источник


Ответы (1)


keybd_event на самом деле не функция Qt, а часть Windows Api.

И keybd_event, и SendInput позволяют отправлять события press и release. Если вы хотите отправить комбинацию ctrl+A, вы должны отправить события следующим образом:

press Ctrl -> press A -> release A -> release Ctrl

Если вы хотите использовать keybd_event, вам нужно вызвать его 4 раза впоследствии, если вы хотите использовать SendInput, вы можете сделать массив из 4 событий.

Вы должны использовать коды клавиатуры из Windows API для имитации событий клавиатуры, а коды Qt могут совпадать с кодами Microsoft.

Также вы должны понимать, что это решение не имеет ничего общего с Qt, его указала Windows.

Вы только что нашли все ссылки на документы, которые вам понадобятся, я думаю, вам следует начать изучать его и задавать более конкретные вопросы, если у вас возникнут проблемы.

person Lol4t0    schedule 21.01.2012