sendmessage с клавишами shift, control, alt - PullRequest
1 голос
/ 05 июля 2010

Я пытаюсь отправить такие комбинации клавиш, как hShift + F8 и т. Д., В определенное окно.Я могу отправить F8 самостоятельно, поставив WM_KEYDOWN, затем WM_KEYUP и указав (int)System.Windows.Forms.Keys.F8 в качестве wParam, но не могу понять, как это сделать с помощью клавиши Shift.Я попытался ORing с System.Windows.Forms.Keys.SHIFT, а также System.Windows.Forms.Keys.SHIFTKEY, но это не похоже на работу.Есть ли какой-то другой способ?

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

Ответы [ 2 ]

1 голос
/ 05 июля 2010

Вы должны использовать keybd_event или SendInput для отправки ключей-модификаторов в другое приложение из-за способа, которым Windows обрабатывает клавиши-модификаторы (забавно, да?). Я думаю, что оба могут потребовать, чтобы другое приложение имело фокус для правильной работы.

Просто отправка серии нажатий клавиш / нажатий клавиш, как если бы вы нажимали и удерживали клавиши-модификаторы, не работает (или, по крайней мере, не в последний раз, когда я это пробовал), поскольку большинство приложений опрашивают эти клавиши отдельно, а не прослушивают для сообщений о них. Я полагаю, если вы контролируете источник для обоих приложений, это может работать.

1 голос
/ 05 июля 2010

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

WM_KEYDOWN -> Shift

WM_KEYDOWN -> F8

WM_KEYUP   -> F8

WM_KEYUP   -> Shift

Вот захват сообщения из Spy ++ последовательности сообщений при нажатии ⇧Shift + F8 в блокноте.

WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:36 fExtended:0 fAltDown:0 fRepeat:0 fUp:0

WM_KEYDOWN nVirtKey:VK_F8 cRepeat:1 ScanCode:42 fExtended:0 fAltDown:0 fRepeat:0 fUp:0

WM_KEYUP nVirtKey:VK_F8 cRepeat:1 ScanCode:42 fExtended:0 fAltDown:0 fRepeat:1 fUp:1

WM_KEYUP nVirtKey:VK_SHIFT cRepeat:1 ScanCode:36 fExtended:0 fAltDown:0 fRepeat:1 fUp:1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...