Что нового

[Мышь, клавиатура] Подскажите, как пользоваться функцией _WinAPI_GetKeyboardState()

kasper_sky

Antivirus
Сообщения
116
Репутация
1
Всем доброго времени суток.

Возникла идея - сделать отображения языка ввода при начале ввода с клавиатуры(именно при вводе с литеральных клавиш).
Насколько я понял из справки, _WinAPI_GetKeyboardState() возвращает статус клавиш в виде структуры byte[256]. Но, к моему большому сожалению, примера в справке нету, как нету и моих знаний по работе со структурами.
На нашем форуме не нашел ни единого применения данной функции, на официальном находит что-то невнятное..

У кого есть какие-либо идеи или ответы?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Функция просто возращает заполненную структуру вида byte[256]. Дальше нужно лишь просто получить данные из этой структуры, указав конкретный индекс. Вот например, показывает что в структуре.

Код:
$lpKeyState = _WinAPI_GetKeyboardState()
_WinAPI_DisplayStruct($lpKeyState,'byte[256]','Состояние клавиш',Default,Default,64)
 
Автор
K

kasper_sky

Antivirus
Сообщения
116
Репутация
1
Разобрался, пошарившись на MSDN.

Код:
#include <WinAPIEx.au3>

While True
	If _LiteralKeyPressed() Then MsgBox(0, '', 'Literal key pressed!')

	Sleep(50)
WEnd


Func _LiteralKeyPressed()
	Local $fKeyPressed = False

	_WinAPI_GetKeyState(0)
	Local $tGetKeyboardState = _WinAPI_GetKeyboardState()

	For $n = 0x41 To 0x5A
		$fKeyPressed = BitOR($fKeyPressed, BitAND(DllStructGetData($tGetKeyboardState, '', ($n + 1)), 128))
	Next

	Return $fKeyPressed
EndFunc


А вызываю я
Код:
_WinAPI_GetKeyState(0)

каждый раз потому, что без него не работало.

Решение этой проблемы я нашел в комментариях к статье о _WinAPI_GetKeyboardState():
GetKeyboardState won't give me correct data unless I call GetKeyState(0) before I call GetKeyboardState. Really weird...
 
Верх