Как имитировать Ctrl + V с помощью keybd_event () в C ++ - PullRequest
0 голосов
/ 18 марта 2020

Я хочу вставить текст из буфера обмена в текстовое поле какой-либо программы. поэтому я попытался использовать keybd_event.

keybd_event(VK_CONTROL,0x1D, 0, 0);
keybd_event('V', 0x2F, 0, 0);
keybd_event('V', 0x2F, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0x1D, KEYEVENTF_KEYUP, 0);

, но это не выполняется. поэтому я попробовал другой способ

keybd_event(VK_CONTROL,0x1D,  KEYEVENTF_EXTENDEDKEY, 0);
keybd_event('V', 0x2F, 0, 0);
keybd_event('V', 0x2F, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0x1D, KEYEVENTF_KEYUP, 0);

, так что это хорошо работает. Однако с тех пор все вводы с клавиатуры вводились с нажатой клавишей Ctrl. может быть, я думаю, что не работает ключ сообщения

как решить эту проблему?

1 Ответ

0 голосов
/ 19 марта 2020

Однако с тех пор все вводы с клавиатуры вводились с нажатой клавишей ctrl. может быть, я думаю, что сообщение не работает

Вы имитируете вправо CONTROL WM_KEYDOWN, но влево CONTROL WM_KEYUP. Таким образом, правая клавиша CTRL не была отпущена.

Будет работать следующий код:

keybd_event(VK_CONTROL, 0x1D, KEYEVENTF_EXTENDEDKEY | 0, 0);
keybd_event('V', 0x2F, KEYEVENTF_EXTENDEDKEY | 0, 0);
keybd_event('V', 0x2F, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0x1D, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);

флаг расширенной клавиши (KEYEVENTF_EXTENDEDKEY)

Указывает, является ли клавиша расширенной клавишей, например правая клавиша ALT и CTRL, которые появляются на улучшенной клавиатуре с 101 или 102 клавишами. Значение равно 1, если это расширенный ключ; в противном случае оно равно 0.

См. WM_KEYUP сообщение .

Функция keybd_event была заменена. Вместо этого используйте SendInput.

...