2011-07-09 3 views
1

У меня есть вопрос о коде сканирования и расширенном OK.отправить scancode в мое приложение

создать простое окно в C++, и я хочу, чтобы обнаружить WM_KEYUP только (значение VK_UP)

Теперь я бегу шпиона ++ и я нажимаю на кнопку Я обнаружить мое сообщение как этот

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 есть ли способ, чтобы отправить код проверки (и другое значение для моего приложения и получить то же самое значение)

ответ

1

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

+0

спасибо, но keybd_event или SendInput оба отправляют значение в другое окно. Я хочу указать сообщение только в моем приложении – user722528

1

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

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

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

Смежные вопросы