Перейти к содержанию

Assembler, Перехват Нажатий На Клавиатуре


Рекомендуемые сообщения

Вот допустим перехват нажатия ЛКМ:

cmp [msg],WM_LBUTTONDOWN

Мне надо сделать перехват ESCAPE

пробовал так:

cmp [msg],WM_ESCAPE

и так:

cmp [msg],WM_ESPACEDOWN

и так:

cmp [msg],WM_ESCDOWN

и сяк:

cmp [msg],WM_ESC

и даже так:

cmp [msg],WM_LESCDOWN ; типо left escape xD

Искал таблицу всех WM_ комманд в гугле, не нашел....

Можно ли использовать таблицу ASCII для перехвата нажатий кнопок? Хоть она у меня есть)

Ссылка на комментарий
Поделиться на другие сайты

Дык а что делать должно? У тебя - прыгает на выход.

Ой не-не-не, стоп!


invoke GetAsyncKeyState,VK_ESCAPE
cmp eax,0
je .wmclose

Типа, по таймеру проверяй и всё. Работать будет, только что проверил.

Ссылка на комментарий
Поделиться на другие сайты

Дык он и должен вылетать, ты .wmclose замени чем-нибудь другим. Не знаю, MessageBox. :D

Напомню, .wmclose тупо закрывает диалоговое окно:


.wmclose:
pop edi esi ebx
invoke EndDialog,[hwnddlg],0

Ссылка на комментарий
Поделиться на другие сайты

Дык он и должен вылетать, ты .wmclose замени чем-нибудь другим. Не знаю, MessageBox. :D

Напомню, .wmclose тупо закрывает диалоговое окно:


.wmclose:
pop edi esi ebx
invoke EndDialog,[hwnddlg],0

Так мне и надо чтоб закрывало окно.. Но только по escape, а он сразу вылетает, как только форма загрузится

Вот я дебил)))) Всё понял спс)

Надо ж было так:

invoke GetAsyncKeyState,VK_ESCAPE

cmp eax,0

jne .wmclose

А я получается спрашивал если нажата escape и если не нажата то закрыть окно :D

Ссылка на комментарий
Поделиться на другие сайты

Э-э-э... Покажи весь код.

Зачем?) Всё и так ясно
invoke	 GetAsyncKeyState,VK_ESCAPE
cmp eax,0
je .wmclose

Этот код смотрит если не нажата escape то выйти, а надо было наоборот - если НАЖАТА escape
Ссылка на комментарий
Поделиться на другие сайты

Почему ж у меня работает? :D

Может, тебя ещё [вот это] событие заинтересует. А-ля:


cmp [msg], WM_KEYDOWN
*тут надо сравнить wParam с нужной VK и что-нибудь сделать*

Ссылка на комментарий
Поделиться на другие сайты

Почему ж у меря работает? :D

О.О как?))

Ну давай разберём))

invoke GetAsyncKeyState,VK_ESCAPE ; выполняет функцию, была ли нажата escape во время её выполнения, \

; результат попадает в регистр eax (0 - если НЕ нажата, и наверное 1 если нажата =)

cmp eax,0 ; смотрит, если в eax 0 (т.е. НЕ нажата)

je .wmclose ; и если НЕ нажата, то прыгнуть на функцию закрытия. Т.е программа с таким кодом будет работать только если зажать ESC

Ссылка на комментарий
Поделиться на другие сайты

Тьфу, да, как-то я по-диагонали читал. Вот твой же код:


.timer:
invoke GetAsyncKeyState,VK_ESCAPE
cmp eax,0
je .condition1
jmp .func1ON
.condition1:
invoke GetAsyncKeyState,VK_F2
cmp eax,0
je .finish
jmp .func1OFF
ret
.func1ON:
invoke MessageBox,NULL,"ON","TEST",MB_OK
jmp .finish
.func1OFF:
...
...
jmp .finish

...Работает. :D

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.