Must AutoIt
Сообщения: 3054
Благодарности: 1009
|
Профиль
|
Сайт
|
Отправить PM
| Цитировать
Цитата beve:
Я специально сделал ToolTip($sBuffer , 0, 80) для примера »
|
В твоём вопросе в первом сообщении было явно указано:
Цитата beve:
Вопрос такой: нужно отслеживать нажатие клавиш на клавиатуре и если какая то клавиша нажата, вывести ее скан код, для примера, в ToolTip »
|
А я не заметил что $sBuffer это Chr($nKeyCode) & " - " & $nKeyCode
Теперь это уже вторая задача...
Цитата beve:
мне нужно чтоб там была буква а, и ее код »
|
Код:
#include <Misc.au3>
HotKeySet("{ESC}", "OnAutoItExit")
Global $nOld_KC = -1
Global Const $WH_KEYBOARD_LL = 13
Global $sBuffer = ""
Global $hStub_KeyProc = DllCallbackRegister("_KeyProc", "int", "int;ptr;ptr")
Global $hMod = DllCall("kernel32.dll", "hwnd", "GetModuleHandle", "ptr", 0)
Global $hHook = DllCall("user32.dll", "hwnd", "SetWindowsHookEx", "int", _
$WH_KEYBOARD_LL, "ptr", DllCallbackGetPtr($hStub_KeyProc), "hwnd", $hMod[0], "dword", 0)
MsgBox(4096, "", "Type anything anywhere and it will appear in the top left corner of the screen.")
While 1
Sleep(10)
WEnd
Func EvaluateKey($nKeyCode)
$nOld_KC = $nKeyCode
If $nKeyCode < 65 Or $nKeyCode > 90 Then Return ;Исключаем всё кроме алфавитных букв
Local $sChar = Chr($nKeyCode)
Switch _WinGetKeyboardLayout(WinGetHandle("[ACTIVE]"))
Case 0409
;
Case 0419
Local $aANSI_Chars = StringSplit("ёйцукенгшщзхъфывапролджэячсмитьбю.?", "")
Local $aASCII_Chars = StringSplit("`qwertyuiop[]asdfghjkl;'zxcvbnm,./&", "")
For $i = 1 To $aANSI_Chars[0]
$sChar = StringReplace($sChar, $aASCII_Chars[$i], $aANSI_Chars[$i])
Next
$sChar = StringUpper($sChar) ;По умолчанию у нас же в верхнем регистре :)
EndSwitch
If Not _IsPressed(10) Then $sChar = StringLower($sChar)
$sBuffer = $sChar & " - " & $nKeyCode
ToolTip($sBuffer, 0, 80)
EndFunc
Func _KeyProc($nCode, $wParam, $lParam)
Local $aRet, $KEYHOOKSTRUCT
If $nCode < 0 Then
$aRet = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hHook[0], "int", $nCode, "ptr", $wParam, "ptr", $lParam)
Return $aRet[0]
EndIf
If $wParam = 256 Then
$KEYHOOKSTRUCT = DllStructCreate("dword;dword;dword;dword;ptr", $lParam)
EvaluateKey(DllStructGetData($KEYHOOKSTRUCT, 1))
EndIf
$aRet = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hHook[0], "int", $nCode, "ptr", $wParam, "ptr", $lParam)
Return $aRet[0]
EndFunc
Func _WinGetKeyboardLayout($hWnd)
Local $aRet = DllCall("user32.dll", "long", "GetWindowThreadProcessId", "hwnd", $hWnd, "ptr", 0)
$aRet = DllCall("user32.dll", "long", "GetKeyboardLayout", "long", $aRet[0])
Return "0000" & Hex($aRet[0], 4)
EndFunc
Func OnAutoItExit()
If $hStub_KeyProc Then DllCallbackFree($hStub_KeyProc)
$hStub_KeyProc = 0
DllCall("user32.dll", "int", "UnhookWindowsHookEx", "hwnd", $hHook[0])
If @HotKeyPressed <> "" Then Exit
EndFunc
|