|
#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. |
#8
|
|||
|
|||
Цитата:
|
#9
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#10
|
||||
|
||||
Таки ТС нужна конкретная кнопка, а не диапазон:
Цитата:
и я не понимаю, почему ТС до сих пор не вбил эти два слова в гугле и не получил ответ на свой вопрос. Касаемо цикла: Цитата:
jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 18.08.2015 в 17:02. |
#11
|
||||
|
||||
Оффтоп:
Может быть и правда, как обычно, простое непонимание заданного вопроса здесь наблюдается с моей стороны ждём прояснения ситуации с позиции автора А если конкретная клавиша нужна, то тогда вот компиляция из всего вышесказанного на примере наблюдения за состоянием Shift Код:
function ShiftDown : boolean; var State : TKeyboardState; begin GetKeyboardState(State); Result:= ((State[VK_SHIFT] and 128) <> 0); // или // Result:= (GetKeyState(VK_SHIFT) <> 0); // или // Result:= (GetAsyncKeyState(VK_SHIFT) <> 0); end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#12
|
|||
|
|||
Цитата:
Код:
function downbutton : BOOLEAN; begin if GetKeyState($10) < 0 then Result := True else Result := False; end; вот и подумал можно ли тоже самое реализовать только со вставкой asm |
#13
|
||||
|
||||
if совершенно лишний, проще result := GetKeyState(16) <> 0.
Цитата:
jmp $ ; Happy End! The Cake Is A Lie. |
#14
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |