![]() |
|
|
#1
|
|||
|
|||
![]() Добрый вечер. Подскажите пожалуйста как определить состояние клавиши нажата ли или нет. Да пример желательно с помощью вставки asm. Заранее благодарю.
Пример: Код:
function down: Boolean; begin asm //.... end; end; |
#2
|
||||
|
||||
![]() Код:
SHORT WINAPI GetKeyState( _In_ int nVirtKey ); jmp $ ; Happy End! The Cake Is A Lie. |
#3
|
||||
|
||||
![]() Нажата это кажись прерывание 60h?
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#4
|
||||
|
||||
![]() Нет в винде никаких программных прерываний. Вернее они есть, но их крайне мало, и они не совпадают с досовскими, потому что это крайне убогий и ущербный способ предоставления сервисов ОС.
jmp $ ; Happy End! The Cake Is A Lie. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
ApxaHGe1 (17.08.2015)
|
#5
|
|||
|
|||
![]() Цитата:
|
#6
|
||||
|
||||
![]() Это работает лишь в очень старых версиях Windows, теперь такое блокируется на уровне драйверной "обвязки" ядра, другими словами GetKeyState самый подходящий вариант для определения состояния конкретной клавиши, иначе есть ещё несколько способов, но они тоже за здоровый образ жизни без "асмы", напр.
Код:
function down: Boolean; var i: integer; begin Result:= false; for i := 0 to 255 do if GetAsyncKeyState(i) <> 0 then Result:= true; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#7
|
||||
|
||||
![]() Зачем же такой гемор с циклом по всем кнопкам, когда есть GetKeyboardState если нужно несколько клавиш?
jmp $ ; Happy End! The Cake Is A Lie. |