Старожил
Сообщения: 307
Благодарности: 137
|
Профиль
|
Отправить PM
| Цитировать
Если тебе требуется узнавать только название нажатой клавиши, то можно вот так:
Код: 
#include <Misc.au3>
HotKeySet("{ESC}", "OnAutoItExit")
_OnStart()
Global Const $WH_KEYBOARD_LL = 13
Global $hStub_KeyProc = DllCallbackRegister("_Key_Proc", "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(100)
WEnd
Func _EvaluateKey_Proc($nKeyCode)
Local $sSound
Local $sChar
;MsgBox(64,Chr($nKeyCode), $nKeyCode, 1) ;с помощью этого узнаем код нужной нам клавиши (только без shift, а то будет зависание)
Switch $nKeyCode
Case 65 To 90, 48 To 57, 186 To 192, 219, 221, 222, 106, 13 ; проверяться будут только нажатия на буквы и цифры и еще клавиши минус и плюс, что после клавиши 0, а код 106 соответствует клавише * на цифровой клавиатуре, 13 - код клавиши Enter
Switch _WinGetKeyboardLayout(WinGetHandle("[ACTIVE]"))
Case 0409 ;Если раскладка английская
If _IsPressed(10) Then ; если нажата клавиша Shift
$sChar=_ReplaceKeyCode_Proc($nKeyCode, $aCapture_Codes, $aEngShift_Codes)
Else ; если не нажата клавиша Shift
$sChar=_ReplaceKeyCode_Proc($nKeyCode, $aCapture_Codes, $aEng_Codes)
EndIf
$sSound = "en.wav"
Case 0419 ;Если расскладка русская
If _IsPressed(10) Then ; если нажата клавиша Shift
$sChar=_ReplaceKeyCode_Proc($nKeyCode, $aCapture_Codes, $aRusShift_Codes)
Else ; если не нажата клавиша Shift
$sChar=_ReplaceKeyCode_Proc($nKeyCode, $aCapture_Codes, $aRus_Codes)
EndIf
$sSound = "ru.wav"
Case 0422 ;Если расскладка украинская
If _IsPressed(10) Then ; если нажата клавиша Shift
$sChar=_ReplaceKeyCode_Proc($nKeyCode, $aCapture_Codes, $aUkrShift_Codes)
Else ; если не нажата клавиша Shift
$sChar=_ReplaceKeyCode_Proc($nKeyCode, $aCapture_Codes, $aUkr_Codes)
EndIf
$sSound = "ukr.wav"
EndSwitch
ToolTip($sChar, 0, 80)
SoundPlay($sSound) ;проигрывать звук при нажатии
Case Else ; если была нажата не буква и не цыфра, то выход из функции
ToolTip("", 0, 80)
Return
EndSwitch
EndFunc
Func _Key_Proc($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_Proc(DllStructGetData($KEYHOOKSTRUCT, 1))
EndIf
$aRet = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hHook[0], "int", $nCode, "ptr", $wParam, "ptr", $lParam)
Return $aRet[0]
EndFunc
;Функция для замены кодов нажатых клавиш с массива
Func _ReplaceKeyCode_Proc($nKeyCode, $aSearch_Array, $aReplace_Array)
For $i = 1 To $aSearch_Array[0]
If $nKeyCode==$aSearch_Array[$i]Then
Return $aReplace_Array[$i]
EndIf
Next
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
func _OnStart()
Global $aEng_Codes[49]
$aEng_Codes[0]=48 ;общее количество активных ячеек в массиве
$aEng_Codes[1]="`"
$aEng_Codes[2]="q"
$aEng_Codes[3]="w"
$aEng_Codes[4]="e"
$aEng_Codes[5]="r"
$aEng_Codes[6]="t"
$aEng_Codes[7]="y"
$aEng_Codes[8]="u"
$aEng_Codes[9]="i"
$aEng_Codes[10]="o"
$aEng_Codes[11]="p"
$aEng_Codes[12]="["
$aEng_Codes[13]="]"
$aEng_Codes[14]="a"
$aEng_Codes[15]="s"
$aEng_Codes[16]="d"
$aEng_Codes[17]="f"
$aEng_Codes[18]="g"
$aEng_Codes[19]="h"
$aEng_Codes[20]="j"
$aEng_Codes[21]="k"
$aEng_Codes[22]="l"
$aEng_Codes[23]=";"
$aEng_Codes[24]="'"
$aEng_Codes[25]="z"
$aEng_Codes[26]="x"
$aEng_Codes[27]="c"
$aEng_Codes[28]="v"
$aEng_Codes[29]="b"
$aEng_Codes[30]="n"
$aEng_Codes[31]="m"
$aEng_Codes[32]=","
$aEng_Codes[33]="."
$aEng_Codes[34]="/"
$aEng_Codes[35]="1"
$aEng_Codes[36]="2"
$aEng_Codes[37]="3"
$aEng_Codes[38]="4"
$aEng_Codes[39]="5"
$aEng_Codes[40]="6"
$aEng_Codes[41]="7"
$aEng_Codes[42]="8"
$aEng_Codes[43]="9"
$aEng_Codes[44]="0"
$aEng_Codes[45]="-"
$aEng_Codes[46]="="
$aEng_Codes[47]="*"
$aEng_Codes[48]="Enter"
Global $aEngShift_Codes[49]
$aEngShift_Codes[0]=48
$aEngShift_Codes[1]="~"
$aEngShift_Codes[2]="Q"
$aEngShift_Codes[3]="W"
$aEngShift_Codes[4]="E"
$aEngShift_Codes[5]="R"
$aEngShift_Codes[6]="T"
$aEngShift_Codes[7]="Y"
$aEngShift_Codes[8]="U"
$aEngShift_Codes[9]="I"
$aEngShift_Codes[10]="O"
$aEngShift_Codes[11]="P"
$aEngShift_Codes[12]="{"
$aEngShift_Codes[13]="}"
$aEngShift_Codes[14]="A"
$aEngShift_Codes[15]="S"
$aEngShift_Codes[16]="D"
$aEngShift_Codes[17]="F"
$aEngShift_Codes[18]="G"
$aEngShift_Codes[19]="H"
$aEngShift_Codes[20]="J"
$aEngShift_Codes[21]="K"
$aEngShift_Codes[22]="L"
$aEngShift_Codes[23]=":"
$aEngShift_Codes[24]='"'
$aEngShift_Codes[25]="Z"
$aEngShift_Codes[26]="X"
$aEngShift_Codes[27]="C"
$aEngShift_Codes[28]="V"
$aEngShift_Codes[29]="B"
$aEngShift_Codes[30]="N"
$aEngShift_Codes[31]="M"
$aEngShift_Codes[32]="<"
$aEngShift_Codes[33]=">"
$aEngShift_Codes[34]="?"
$aEngShift_Codes[35]="!"
$aEngShift_Codes[36]="@"
$aEngShift_Codes[37]="#"
$aEngShift_Codes[38]="$"
$aEngShift_Codes[39]="%"
$aEngShift_Codes[40]="^"
$aEngShift_Codes[41]="&"
$aEngShift_Codes[42]="*"
$aEngShift_Codes[43]="("
$aEngShift_Codes[44]=")"
$aEngShift_Codes[45]="_"
$aEngShift_Codes[46]="+"
$aEngShift_Codes[47]="*"
$aEngShift_Codes[48]="Enter"
Global $aRus_Codes[49]
$aRus_Codes[0]=48
$aRus_Codes[1]="ё"
$aRus_Codes[2]="й"
$aRus_Codes[3]="ц"
$aRus_Codes[4]="у"
$aRus_Codes[5]="к"
$aRus_Codes[6]="е"
$aRus_Codes[7]="н"
$aRus_Codes[8]="г"
$aRus_Codes[9]="ш"
$aRus_Codes[10]="щ"
$aRus_Codes[11]="з"
$aRus_Codes[12]="х"
$aRus_Codes[13]="ъ"
$aRus_Codes[14]="ф"
$aRus_Codes[15]="ы"
$aRus_Codes[16]="в"
$aRus_Codes[17]="а"
$aRus_Codes[18]="п"
$aRus_Codes[19]="р"
$aRus_Codes[20]="о"
$aRus_Codes[21]="л"
$aRus_Codes[22]="д"
$aRus_Codes[23]="ж"
$aRus_Codes[24]="э"
$aRus_Codes[25]="я"
$aRus_Codes[26]="ч"
$aRus_Codes[27]="с"
$aRus_Codes[28]="м"
$aRus_Codes[29]="и"
$aRus_Codes[30]="т"
$aRus_Codes[31]="ь"
$aRus_Codes[32]="б"
$aRus_Codes[33]="ю"
$aRus_Codes[34]="."
$aRus_Codes[35]="1"
$aRus_Codes[36]="2"
$aRus_Codes[37]="3"
$aRus_Codes[38]="4"
$aRus_Codes[39]="5"
$aRus_Codes[40]="6"
$aRus_Codes[41]="7"
$aRus_Codes[42]="8"
$aRus_Codes[43]="9"
$aRus_Codes[44]="0"
$aRus_Codes[45]="-"
$aRus_Codes[46]="="
$aRus_Codes[47]="*"
$aRus_Codes[48]="Enter"
Global $aRusShift_Codes[49]
$aRusShift_Codes[0]=48
$aRusShift_Codes[1]="Ё"
$aRusShift_Codes[2]="Й"
$aRusShift_Codes[3]="Ц"
$aRusShift_Codes[4]="У"
$aRusShift_Codes[5]="К"
$aRusShift_Codes[6]="Е"
$aRusShift_Codes[7]="Н"
$aRusShift_Codes[8]="Г"
$aRusShift_Codes[9]="Ш"
$aRusShift_Codes[10]="Щ"
$aRusShift_Codes[11]="З"
$aRusShift_Codes[12]="Х"
$aRusShift_Codes[13]="Ъ"
$aRusShift_Codes[14]="Ф"
$aRusShift_Codes[15]="Ы"
$aRusShift_Codes[16]="В"
$aRusShift_Codes[17]="А"
$aRusShift_Codes[18]="П"
$aRusShift_Codes[19]="Р"
$aRusShift_Codes[20]="О"
$aRusShift_Codes[21]="Л"
$aRusShift_Codes[22]="Д"
$aRusShift_Codes[23]="Ж"
$aRusShift_Codes[24]="Э"
$aRusShift_Codes[25]="Я"
$aRusShift_Codes[26]="Ч"
$aRusShift_Codes[27]="С"
$aRusShift_Codes[28]="М"
$aRusShift_Codes[29]="И"
$aRusShift_Codes[30]="Т"
$aRusShift_Codes[31]="Ь"
$aRusShift_Codes[32]="Б"
$aRusShift_Codes[33]="Ю"
$aRusShift_Codes[34]=","
$aRusShift_Codes[35]="!"
$aRusShift_Codes[36]='"'
$aRusShift_Codes[37]="№"
$aRusShift_Codes[38]=";"
$aRusShift_Codes[39]="%"
$aRusShift_Codes[40]=":"
$aRusShift_Codes[41]="?"
$aRusShift_Codes[42]="*"
$aRusShift_Codes[43]="("
$aRusShift_Codes[44]=")"
$aRusShift_Codes[45]="_"
$aRusShift_Codes[46]="+"
$aRusShift_Codes[47]="*"
$aRusShift_Codes[48]="Enter"
Global $aUkr_Codes[49]
$aUkr_Codes[0]=48
$aUkr_Codes[1]="'"
$aUkr_Codes[2]="й"
$aUkr_Codes[3]="ц"
$aUkr_Codes[4]="у"
$aUkr_Codes[5]="к"
$aUkr_Codes[6]="е"
$aUkr_Codes[7]="я"
$aUkr_Codes[8]="г"
$aUkr_Codes[9]="ш"
$aUkr_Codes[10]="щ"
$aUkr_Codes[11]="з"
$aUkr_Codes[12]="х"
$aUkr_Codes[13]="ї"
$aUkr_Codes[14]="ф"
$aUkr_Codes[15]="і"
$aUkr_Codes[16]="в"
$aUkr_Codes[17]="а"
$aUkr_Codes[18]="п"
$aUkr_Codes[19]="р"
$aUkr_Codes[20]="о"
$aUkr_Codes[21]="л"
$aUkr_Codes[22]="д"
$aUkr_Codes[23]="ж"
$aUkr_Codes[24]="є"
$aUkr_Codes[25]="н"
$aUkr_Codes[26]="ч"
$aUkr_Codes[27]="с"
$aUkr_Codes[28]="м"
$aUkr_Codes[29]="и"
$aUkr_Codes[30]="т"
$aUkr_Codes[31]="ь"
$aUkr_Codes[32]="б"
$aUkr_Codes[33]="ю"
$aUkr_Codes[34]="."
$aUkr_Codes[35]="1"
$aUkr_Codes[36]="2"
$aUkr_Codes[37]="3"
$aUkr_Codes[38]="4"
$aUkr_Codes[39]="5"
$aUkr_Codes[40]="6"
$aUkr_Codes[41]="7"
$aUkr_Codes[42]="8"
$aUkr_Codes[43]="9"
$aUkr_Codes[44]="0"
$aUkr_Codes[45]="-"
$aUkr_Codes[46]="="
$aUkr_Codes[47]="*"
$aUkr_Codes[48]="Enter"
Global $aUkrShift_Codes[49]
$aUkrShift_Codes[0]=48
$aUkrShift_Codes[1]="’"
$aUkrShift_Codes[2]="Й"
$aUkrShift_Codes[3]="Ц"
$aUkrShift_Codes[4]="У"
$aUkrShift_Codes[5]="К"
$aUkrShift_Codes[6]="Е"
$aUkrShift_Codes[7]="Я"
$aUkrShift_Codes[8]="Г"
$aUkrShift_Codes[9]="Ш"
$aUkrShift_Codes[10]="Щ"
$aUkrShift_Codes[11]="З"
$aUkrShift_Codes[12]="Х"
$aUkrShift_Codes[13]="Ї"
$aUkrShift_Codes[14]="Ф"
$aUkrShift_Codes[15]="І"
$aUkrShift_Codes[16]="В"
$aUkrShift_Codes[17]="А"
$aUkrShift_Codes[18]="П"
$aUkrShift_Codes[19]="Р"
$aUkrShift_Codes[20]="О"
$aUkrShift_Codes[21]="Л"
$aUkrShift_Codes[22]="Д"
$aUkrShift_Codes[23]="Ж"
$aUkrShift_Codes[24]="Є"
$aUkrShift_Codes[25]="Н"
$aUkrShift_Codes[26]="Ч"
$aUkrShift_Codes[27]="С"
$aUkrShift_Codes[28]="М"
$aUkrShift_Codes[29]="И"
$aUkrShift_Codes[30]="Т"
$aUkrShift_Codes[31]="Ь"
$aUkrShift_Codes[32]="Б"
$aUkrShift_Codes[33]="Ю"
$aUkrShift_Codes[34]=","
$aUkrShift_Codes[35]="!"
$aUkrShift_Codes[36]='"'
$aUkrShift_Codes[37]="№"
$aUkrShift_Codes[38]=";"
$aUkrShift_Codes[39]="%"
$aUkrShift_Codes[40]=":"
$aUkrShift_Codes[41]="?"
$aUkrShift_Codes[42]="*"
$aUkrShift_Codes[43]="("
$aUkrShift_Codes[44]=")"
$aUkrShift_Codes[45]="_"
$aUkrShift_Codes[46]="+"
$aUkrShift_Codes[47]="*"
$aUkrShift_Codes[48]="Enter"
;
Global $aCapture_Codes[49]
$aCapture_Codes[0]=48 ;общее кол. акт. ячеек массива
$aCapture_Codes[1]=192
$aCapture_Codes[2]=81
$aCapture_Codes[3]=87
$aCapture_Codes[4]=69
$aCapture_Codes[5]=82
$aCapture_Codes[6]=84
$aCapture_Codes[7]=89
$aCapture_Codes[8]=85
$aCapture_Codes[9]=73
$aCapture_Codes[10]=79
$aCapture_Codes[11]=80
$aCapture_Codes[12]=219
$aCapture_Codes[13]=221
$aCapture_Codes[14]=65
$aCapture_Codes[15]=83
$aCapture_Codes[16]=68
$aCapture_Codes[17]=70
$aCapture_Codes[18]=71
$aCapture_Codes[19]=72
$aCapture_Codes[20]=74
$aCapture_Codes[21]=75
$aCapture_Codes[22]=76
$aCapture_Codes[23]=186
$aCapture_Codes[24]=222
$aCapture_Codes[25]=90
$aCapture_Codes[26]=88
$aCapture_Codes[27]=67
$aCapture_Codes[28]=86
$aCapture_Codes[29]=66
$aCapture_Codes[30]=78
$aCapture_Codes[31]=77
$aCapture_Codes[32]=188
$aCapture_Codes[33]=190
$aCapture_Codes[34]=191
$aCapture_Codes[35]=49
$aCapture_Codes[36]=50
$aCapture_Codes[37]=51
$aCapture_Codes[38]=52
$aCapture_Codes[39]=53
$aCapture_Codes[40]=54
$aCapture_Codes[41]=55
$aCapture_Codes[42]=56
$aCapture_Codes[43]=57
$aCapture_Codes[44]=48
$aCapture_Codes[45]=189
$aCapture_Codes[46]=187
$aCapture_Codes[47]=106 ;* на цифровой клавиатуре
$aCapture_Codes[48]=13 ;Код клавиши Enter
EndFunc
|