Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Keyboard hook


Автор: acp 28.5.2003, 16:17

Устанавливаю хук на клавиатуру. Пытаюсь отловить событие по отпусканию кнопки


Код

test lParam, KF_UP
jz KeyDownLbl
;Процедура обработки
KeyDownLbl:



Не ловится... sad.gif
А так, например, работает


Код

test lParam, KF_UP
jnz KeyDownLbl
;Процедура обработки
KeyDownLbl:



причём "процедура обработки" выполняется 2-жды - по отпусканию и нажатию.
Из определения KF_UP, видно, что для установки того, что клавиша отпущена, 31 бит lParam'а должен быть установлен в 1. Почему он 0?

Автор: acp 28.5.2003, 19:01

Вот чёрт, ерунда какая. Эту тему можно считать закрытой. Я разобрался с этой проблемой. lParam - 4-х байтовый, KF_UP - 2-х.
Вот только почему в masm'овских инклюдах KF_UP ообъявлен как 8000h, тогда как должен бы быть объявлен как 80000000h? Для экономии размера?

Автор: miroslav 18.8.2003, 16:19
всё на много проще если работать напрямую с портами. из порта 60h получаешь скан коды нажатия и отжатия при чём скан код отжатия равен скан коду нажатия плюс 80h. т.е. различие только в 7-ом бите и рпзличается програмно при помоши одного прыжка:

js клавиша_отжата
;
;

клавиша_отжата:
;
;

Автор: acp 18.8.2003, 22:28

А в NT можно работать напрямую с портами?

Автор: Baa 19.8.2003, 08:51
acp, нет, нельзя.
з.ы. можно поставить драйвер (WinIO кажется звался...), который позволит это делать, но без ухищрений - нельзя.

Автор: acp 23.8.2003, 22:00
Цитата
нет, нельзя


А я знаю. smile.gif
В предыдущем сообщении просто не поставил смайлик, что бы оно воспринималось как ироничный вопрос.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)