отправить скан-код в мое приложение - PullRequest
1 голос
/ 09 июля 2011

У меня есть вопрос о сканированном коде и расширенном ОК.

Я создаю простое окно на c ++ и хочу обнаруживать только WM_KEYUP (значение VK_UP)

Теперь я запускаю spy ++ инажмите клавишу «вверх», и я обнаружил, что мое сообщение выглядит следующим образом

keydown  vk_up    crepeat1     scancode 48     extended1      altdown0     frepeat1      up0    

Теперь, если я отправляю сообщение в свое приложение, я получаю следующее сообщение

SendMessage ( wnd , WM_KEYDOWN , VK_UP ,1);

keydown  vk_up    crepeat1     scancode 00     extended0      altdown0     frepeat1      up0 

Вы видите другое в коде сканирования и другихзначение.

Мой вопрос, почему это отличается, даже если я отправляю одно и то же сообщение?2 есть ли способ отправить код сканирования (и другое значение в мое приложение и получить то же значение)

Ответы [ 3 ]

1 голос
/ 09 июля 2011

Проверьте документы на WM_KEYDOWN.Код сканирования содержится в битах с 16 по 23 в аргументе LPARAM.Вы прошли 1, биты кода сканирования, таким образом, все равны нулю.

Это нормально, не так много приложений, которые действительно проверяют код сканирования.Однако использование SendMessage () некорректно, сообщения с клавиатуры поступают в очередь сообщений.Вы должны использовать PostMessage ().Разница в том, что многие циклы сообщений обращаются к нажатиям клавиш для реализации ускорителей (или горячих клавиш)И вызовите TranslateMesssage (), чтобы превратить сообщения WM_KEYDOWN в сообщения WM_CHAR для ввода ключей.

Есть еще одна проблема, неразрешимая, вы не можете контролировать состояние клавиатуры.Модификаторы Ctrl, Alt и Shift.Если у пользователя, скажем, нажата клавиша Shift, приложение увидит Shift + Up, оно вполне может интерпретировать его по-разному, как, конечно, делают редакторы.Только использование SendInput () является лекарством от этого.

1 голос
/ 14 марта 2012
SendMessage ( wnd , WM_KEYDOWN , VK_UP ,0x00480001); 
1 голос
/ 09 июля 2011

Не знаю, почему разница, но вы можете использовать keybd_event или SendInput для синтеза нажатий клавиш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...