![]() |
Quote:
В Windows невозможно различить нажатие <Enter> и <NumPadEnter>, используя только GetKeyboardState(). Если анализировать входящие скан-коды и вести собственную таблицу, аналогичную таблице GetKeyboardState(), но только для единственной клавиши <NumPadEnter> - то потеря фокуса ввода (и обнуление флага нажатия <NumPadEnter>) не представляет большой проблемы, поскольку <NumPadEnter> генерит автоповтор, а значит при возврате фокуса с нажатой клавишей <NumPadEnter> - программа немедленно о этом узнает и установит соответствующий флаг в таблице нажатых клавиш ( напомню, что в обсуждаемом случае таблица нажатых клавиш состоит из единственной ячейки, учитывающей состояние клавиши <NumPadEnter> ). |
Сделал различие <Enter> и <NumpadEnter> через WM_KEYDOWN и WM_KEYUP. С хуками довольно много мороки, они должны быть в DLL. Вроде работает. Но Windows довольно странно это обрабатывает. Нажмем <Enter> и не отжимая ее жмем <NumpadEnter>. Держим обе клавиши. Эмулятор соответственно получает последовательно коды 0153 и 0166. Отжимаем <Enter>, получаем код 0213. Снова нажимаем <Enter>, соответственно получаем код 0153. А вот дальше самое интересное: отжимаем <Enter>, <NumpadEnter> у нас так и нажат, получаем последовательно коды 0213 и 0206, словно отжали обе клавиши, хотя <NumpadEnter> до сих пор нажат. Функция GetKeyboardState в позиции <Enter>-а говорит, что ни один <Enter> не нажат, хотя <NumpadEnter> так и остается в нажатом состоянии.
Коды клавиатуры можно посмотреть в программе SCAN.SAV на диске sysimage.dsk. P.S. Интересно всё-таки, а чем руководствовалась Microsoft, когда через GetKeyboardState сделала различие Shift-ов, Ctrl-ей и Alt-ов, а вот Enter-ов не удосужилась. БОЛЬШОЕ СПАСИБО всем за консультации и помощь !!! |
Quote:
Quote:
|
Quote:
1. Чаще всего хуки вообще не нужны - достаточно обрабатывать *KEYDOWN и *KEYUP. 2. Хуки не должны быть в DLL. Только что специально проверил - хук, установленный обычной программой, перехватывает все нажатия клавиш в Windows Vista пока программа запущена, вне зависимости от текущего активного приложения и положения фокуса ввода. Строчка установки хука в программе выглядит так: Code:
HHOOK g_hHookKbdLL = NULL; // hook handle |
1 Attachment(s)
Размапил все клавиши, собственно они все есть. Пока только две таблицы - РУС и ЛАТ. Задействовал основное поле, теперь оба Shift-а одинаковые, АЛФ - это контекстное меню, LeftCtrl -УПР, RightCtrl - ГРАФ, CapsLock - ФИКС. С буквами и цифрами вроде и так ясно. Теперь другие клавиши, если есть различие в таблицах, то сперва ЛАТ, затем РУС:
Code:
<`~> - <;+> |
Quote:
Вообще интересный вариант. Только для ноутбуков без расширенной клавиатуры клавиши СБРОС, СТОП, ПОМ, УСТ и ИСП - ? А вот эти символы & ( ) надо было как на РС сделать. |
Quote:
Quote:
|
Quote:
|
Quote:
Quote:
ПОМ - F7 УСТ - F8 ИСП - F9 СБРОС - F11 СТОП -F12 К1...К5 - F1...F5 Quote:
И сделать еще только одну инверсную таблицу для символов у которых регистр отличается от РС, вот сейчас ":" работает наоборот. Quote:
Quote:
|
Quote:
|
| All times are GMT +4. The time now is 02:54. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.