Показать полную графическую версию : [решено] Отслеживание нажатий клавиш на клавиатуре (чтоб узнать код нажатой клавиши)
Вопрос такой: нужно отслеживать нажатие клавиш на клавиатуре и если какая то клавиша нажата, вывести ее скан код, для примера, в ToolTip. (Хочу потом сделать чтото подобное, что есть у Punto Switcher-a, тоесть чтоб озвучивались нажатые клавиши в русской расскладке - одним звуком, в английской - другим, а в украинском - третьим. ) Есть код CreatoR-а: Ссылка (http://forum.ru-board.com/topic.cgi?forum=5&topic=17705&start=1400#16), который я вот немного упростил, чтоб показать что мне нужно:HotKeySet("{ESC}", "OnAutoItExit")
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)
$sBuffer= Chr($nKeyCode)&" - "&$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 OnAutoItExit()
If $hStub_KeyProc Then DllCallbackFree($hStub_KeyProc)
$hStub_KeyProc = 0
DllCall("user32.dll", "int", "UnhookWindowsHookEx", "hwnd", $hHook[0])
If @HotKeyPressed <> "" Then Exit
EndFunc так вот, как изменить этот код, или сделать еще проще, чтоб в ToolTip показывался скан код нажатой клавиши, а то в этом примере отображаются только английские символы и причем в верхнем регистре, даже если нажать - ф, то отображается A.
как изменить этот код, или сделать еще проще, чтоб в ToolTip показывался скан код нажатой клавиши »
ToolTip($nKeyCode, 0, 80)?
Я специально сделал ToolTip($sBuffer , 0, 80) для примера, чтоб показать всем, что если нажать например на русскую букву а, при русской расскладке, то что будет показано в ToolTip при текущем коде, а мне нужно чтоб там была буква а, и ее код.
Я специально сделал ToolTip($sBuffer , 0, 80) для примера »
В твоём вопросе в первом сообщении было явно указано:
Вопрос такой: нужно отслеживать нажатие клавиш на клавиатуре и если какая то клавиша нажата, вывести ее скан код, для примера, в ToolTip »
А я не заметил что $sBuffer это Chr($nKeyCode) & " - " & $nKeyCode :)
Теперь это уже вторая задача...
мне нужно чтоб там была буква а, и ее код »
#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
Спасибо, за идею. Вот, сделал то что было непонятно (а то в приведенном выше примере "не работали" некоторые клавиши-ю,х,ъ...):#include <Misc.au3>
HotKeySet("{ESC}", "OnAutoItExit")
Global Const $WH_KEYBOARD_LL = 13
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(30)
WEnd
Func EvaluateKey($nKeyCode)
Local $captureCodes, $engWithShiftCodes, $engCodes, $rusWithShiftCodes,$rusCodes, $ukrWithShiftCodes, $ukrCodes, $i
Switch $nKeyCode
Case 65 To 90, 48 To 57,186,188,190,191,192,219,221,222 ; проверяться будут только нажатия на буквы и цифры
If StringLen($nKeyCode)<3 Then $nKeyCode="0"&$nKeyCode
Switch _WinGetKeyboardLayout(WinGetHandle("[ACTIVE]"))
;Если раскладка английская
Case 0409
If _IsPressed(10) Then ; если нажата клавиша Shift
$captureCodes = StringSplit("192,081,087,069,082,084,089,085,073,079,080,219,221,065,083,068,070,071,072,074,075,076,186,222,090, 088,067,086,066,078,077,188,190,191,048,049,050,051,052,053,054,055,056,057", ",")
$engWithShiftCodes = StringSplit("126,081,087,069,082,084,089,085,073,079,080,123,125,065,83,068,070,071,072,074,075,076,058,034,090,0 88,067,086,066,078,077,060,062,063,041,033,064,035,036,037,094,038,042,040", ",")
For $i = 1 To $captureCodes [0]
$nKeyCode = StringReplace($nKeyCode,$captureCodes [$i], $engWithShiftCodes[$i])
Next
ToolTip(Chr($nKeyCode)& " - "&$nKeyCode, 0, 80)
SoundPlay("en.wav") ;проигрывать звук при нажатии
Else ; если не нажата клавиша Shift
$captureCodes = StringSplit("192,081,087,069,082,084,089,085,073,079,080,219,221,065,083,068,070,071,072,074,075,076,186,222,090, 088,067,086,066,078,077,188,190,191,048,049,050,051,052,053,054,055,056,057", ",")
$engCodes = StringSplit("096,113,119,101,114,116,121,117,105,111,112,091,093,097,115,100,102,103,104,106,107,108,059,039,122, 120,099,118,098,110,109,044,046,047,048,049,050,051,052,053,054,055,056,057", ",")
For $i = 1 To $captureCodes [0]
$nKeyCode = StringReplace($nKeyCode,$captureCodes [$i], $engCodes[$i])
Next
ToolTip(Chr($nKeyCode)& " - "&$nKeyCode, 0, 80)
SoundPlay("en.wav") ;проигрывать звук при нажатии
EndIf
;Если расскладка русская
Case 0419
If _IsPressed(10) Then ; если нажата клавиша Shift
$captureCodes = StringSplit("192,081,087,069,082,084,089,085,073,079,080,219,221,065,083,068,070,071,072,074,075,076,186,222,090, 088,067,086,066,078,077,188,190,191,048,049,050,051,052,053,054,055,056,057", ",")
$rusWithShiftCodes = StringSplit("168,201,214,211,202,197,205,195,216,217,199,213,218,212,219,194,192,207,208,206,203,196,198,221,223, 215,209,204,200,210,220,193,222,044,041,033,034,185,059,037,058,063,042,040", ",")
For $i = 1 To $captureCodes [0]
$nKeyCode = StringReplace($nKeyCode,$captureCodes [$i], $rusWithShiftCodes[$i])
Next
ToolTip(Chr($nKeyCode)& " - "&$nKeyCode, 0, 80)
SoundPlay("ru.wav") ;проигрывать звук при нажатии
Else ; если не нажата клавиша Shift
$captureCodes = StringSplit("192,081,087,069,082,084,089,085,073,079,080,219,221,065,083,068,070,071,072,074,075,076,186,222,090, 088,067,086,066,078,077,188,190,191,048,049,050,051,052,053,054,055,056,057", ",")
$rusCodes = StringSplit("184,233,246,243,234,229,237,227,248,249,231,245,250,244,251,226,224,239,240,238,235,228,230,253,255, 247,241,236,232,242,252,225,254,046,048,049,050,051,052,053,054,055,056,057", ",")
For $i = 1 To $captureCodes [0]
$nKeyCode = StringReplace($nKeyCode,$captureCodes [$i], $rusCodes[$i])
Next
ToolTip(Chr($nKeyCode)& " - "&$nKeyCode, 0, 80)
SoundPlay("ru.wav") ;проигрывать звук при нажатии
EndIf
;если расскладка украинская
Case 0422
If _IsPressed(10) Then ; если нажата клавиша Shift
$captureCodes = StringSplit("192,081,087,069,082,084,090,085,073,079,080,219,221,065,083,068,070,071,072,074,075,076,186,222,089, 088,067,086,066,078,077,188,190,191,048,049,050,051,052,053,054,055,056,057", ",")
$ukrWithShiftCodes = StringSplit("146,201,214,211,202,197,205,195,216,217,199,213,175,212,178,194,192,207,208,206,203,196,198,170,223, 215,209,204,200,210,220,193,222,044,041,033,034,185,059,037,058,063,042,040", ",")
For $i = 1 To $captureCodes [0]
$nKeyCode = StringReplace($nKeyCode,$captureCodes [$i], $ukrWithShiftCodes[$i])
Next
ToolTip(Chr($nKeyCode)& " - "&$nKeyCode, 0, 80)
SoundPlay("ukr.wav") ;проигрывать звук при нажатии
Else ; если не нажата клавиша Shift
$captureCodes = StringSplit("191,192,081,087,069,082,084,090,085,073,079,080,219,221,065,083,068,070,071,072,074,075,076,186,222, 089,088,067,086,066,078,077,188,190,048,049,050,051,052,053,054,055,056,057", ",")
$ukrCodes = StringSplit("046,039,233,246,243,234,229,237,227,248,249,231,245,191,244,179,226,224,239,240,238,235,228,230,186, 255,247,241,236,232,242,252,225,254,048,049,050,051,052,053,054,055,056,057", ",")
For $i= 1 To $captureCodes [0]
$nKeyCode = StringReplace($nKeyCode, $captureCodes [$i], $ukrCodes[$i])
Next
ToolTip(Chr($nKeyCode)& " - "&$nKeyCode, 0, 80)
SoundPlay("ukr.wav") ;проигрывать звук при нажатии
EndIf
EndSwitch
Case Else ; если была нажата не буква и не цыфра, то выход из функции
Return
EndSwitch
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
Вот, сделал »
Да... вижу ты не экономил на коде http://files.myopera.com/Creat0R/Opera_AC/Icons/whistle.gif
Я бы сократил так:
#include <Misc.au3>
HotKeySet("{ESC}", "OnAutoItExit")
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 $sCapt_Codes, $sEng_Codes, $sEngShift_Codes, $sRus_Codes, $sRusShift_Codes
Local $sUkrCapture_Codes, $sUkr_Codes, $sUkrShift_Codes
Local $aCapture_Codes, $aEng_Codes, $aEngShift_Codes, $aRus_Codes, $aRusShift_Codes
Local $aUkrCapture_Codes, $aUkr_Codes, $aUkrShift_Codes
Local $sSound
Switch $nKeyCode
Case 65 To 90, 48 To 57, 186, 188, 190, 191, 192, 219, 221, 222 ; проверяться будут только нажатия на буквы и цифры
If StringLen($nKeyCode) < 3 Then $nKeyCode = "0" & $nKeyCode
$sCapt_Codes = _
"192,081,087,069,082,084,089,085,073,079,080,219,221,065,083,068,070,071,072,074,075,076," & _
"186,222,090,088,067,086,066,078,077,188,190,191,048,049,050,051,052,053,054,055,056,057"
$sEng_Codes = _
"096,113,119,101,114,116,121,117,105,111,112,091,093,097,115,100,102,103,104,106,107,108," & _
"059,039,122,120,099,118,098,110,109,044,046,047,048,049,050,051,052,053,054,055,056,057"
$sEngShift_Codes = _
"126,081,087,069,082,084,089,085,073,079,080,123,125,065,083,068,070,071,072,074,075,076," & _
"058,034,090,088,067,086,066,078,077,060,062,063,041,033,064,035,036,037,094,038,042,040"
$sRus_Codes = _
"184,233,246,243,234,229,237,227,248,249,231,245,250,244,251,226,224,239,240,238,235,228," & _
"230,253,255,247,241,236,232,242,252,225,254,046,048,049,050,051,052,053,054,055,056,057"
$sRusShift_Codes = _
"168,201,214,211,202,197,205,195,216,217,199,213,218,212,219,194,192,207,208,206,203,196," & _
"198,221,223,215,209,204,200,210,220,193,222,044,041,033,034,185,059,037,058,063,042,040"
$sUkrCapture_Codes = StringReplace($sCapt_Codes, "090", "089")
$sUkr_Codes = _
"046,039,233,246,243,234,229,237,227,248,249,231,245,191,244,179,226,224,239,240,238,235," & _
"228,230,186,255,247,241,236,232,242,252,225,254,048,049,050,051,052,053,054,055,056,057"
$sUkrShift_Codes = _
"146,201,214,211,202,197,205,195,216,217,199,213,175,212,178,194,192,207,208,206,203,196," & _
"198,170,223,215,209,204,200,210,220,193,222,044,041,033,034,185,059,037,058,063,042,040"
$aCapture_Codes = StringSplit($sCapt_Codes, ",")
$aEng_Codes = StringSplit($sEng_Codes, ",")
$aEngShift_Codes = StringSplit($sEngShift_Codes, ",")
$aRus_Codes = StringSplit($sRus_Codes, ",")
$aRusShift_Codes = StringSplit($sRusShift_Codes, ",")
$aUkrCapture_Codes = StringSplit($sUkrCapture_Codes, ",")
$aUkr_Codes = StringSplit($sUkr_Codes, ",")
$aUkrShift_Codes = StringSplit($sUkrShift_Codes, ",")
Switch _WinGetKeyboardLayout(WinGetHandle("[ACTIVE]"))
Case 0409 ;Если раскладка английская
If _IsPressed(10) Then ; если нажата клавиша Shift
_ReplaceKeyCode_Proc($nKeyCode, $aCapture_Codes, $aEngShift_Codes)
Else ; если не нажата клавиша Shift
_ReplaceKeyCode_Proc($nKeyCode, $aCapture_Codes, $aEng_Codes)
EndIf
$sSound = "en.wav"
Case 0419 ;Если расскладка русская
If _IsPressed(10) Then ; если нажата клавиша Shift
_ReplaceKeyCode_Proc($nKeyCode, $aCapture_Codes, $aRusShift_Codes)
Else ; если не нажата клавиша Shift
_ReplaceKeyCode_Proc($nKeyCode, $aCapture_Codes, $aRus_Codes)
EndIf
$sSound = "ru.wav"
Case 0422 ;Если расскладка украинская
If _IsPressed(10) Then ; если нажата клавиша Shift
_ReplaceKeyCode_Proc($nKeyCode, $aUkrCapture_Codes, $aUkrShift_Codes)
Else ; если не нажата клавиша Shift
_ReplaceKeyCode_Proc($nKeyCode, $aUkrCapture_Codes, $aUkr_Codes)
EndIf
$sSound = "ukr.wav"
EndSwitch
ToolTip(Chr($nKeyCode) & " - " & $nKeyCode, 0, 80)
SoundPlay($sSound) ;проигрывать звук при нажатии
Case Else ; если была нажата не буква и не цыфра, то выход из функции
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(ByRef $nKeyCode, $aSearch_Array, $aReplace_Array)
For $i = 1 To $aSearch_Array[0]
$nKeyCode = StringReplace($nKeyCode, $aSearch_Array[$i], $aReplace_Array[$i])
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
Я бы сократил так: »
Согласен, так выглядет получше! И почти все работает, но вот при украинской расскладке, если набирать буквы в нижнем регистре, то набирается не то: при наборе символов абвгдеєжзиіїйклмнопрстуахцчшщюяь - в ToolTip показываются вьінлкждщмфх'уосZрапчицвзйягшбетс...А в верхнем регистре (при удерживании Shift) набирается то что нужно.
У себя в примере, я тоже заморочился немного с укр раскладкой, но там проблема была в трех местах, а тут? Может тебе понятней почему тут так?
но вот при украинской расскладке »
Сорри, я в украинском не бум бум, и ставить её для проверки пока не могу, у меня были серъёзные траблы с раскладками, пока наладилось, трогать не хочется, чтобы не испортить :pray:
P.S
Но могу предложить использовать всё же мой метод, с реальными буквами в массиве, а не кодами - так будет легче для разбора в дальнейшем.
Но могу предложить использовать всё же мой метод, с реальными буквами в массиве, а не кодами - так будет легче для разбора в дальнейшем. »
Согласился и переделал. Кажись теперь всё :) :#include <Misc.au3>
HotKeySet("{ESC}", "OnAutoItExit")
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 $sCapt_Codes, $sEng_Codes, $sEngShift_Codes, $sRus_Codes, $sRusShift_Codes
Local $sUkr_Codes, $sUkrShift_Codes
Local $aCapture_Codes, $aEng_Codes, $aEngShift_Codes, $aRus_Codes, $aRusShift_Codes, $aUkr_Codes, $aUkrShift_Codes
Local $sSound
Local $sChar
Switch $nKeyCode
Case 65 To 90, 48 To 57, 186 To 192, 219, 221, 222 ; проверяться будут только нажатия на буквы и цифры и еще клавиши минус и плюс, что после клавиши 0.
$sCapt_Codes = _
"АQWERTYUIOPЫЭASDFGHJKLєЮZXCVBNMјѕї" & _
"1234567890Ѕ»"
$sEng_Codes = _
"`qwertyuiop[]asdfghjkl;'zxcvbnm,./" & _
"1234567890-="
$sEngShift_Codes = _
'~QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>?' & _
'!@#$%^&*()_+'
$sRus_Codes = _
"ёйцукенгшщзхъфывапролджэячсмитьбю." & _
"1234567890-="
$sRusShift_Codes = _
'ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,' & _
'!"№;%:?*()_+'
$sUkr_Codes = _
"'йцукеягшщзхЇфівапролджєнчсмитьбю." & _
"1234567890-="
$sUkrShift_Codes = _
"’ЙЦУКЕЯГШЩЗХЇФІВАПРОЛДЖЄНЧСМИТЬБЮ," & _
'!"№;%:?*()_+'
$aCapture_Codes = StringSplit($sCapt_Codes, "")
$aEng_Codes = StringSplit($sEng_Codes, "")
$aEngShift_Codes = StringSplit($sEngShift_Codes, "")
$aRus_Codes = StringSplit($sRus_Codes, "")
$aRusShift_Codes = StringSplit($sRusShift_Codes, "")
$aUkr_Codes = StringSplit($sUkr_Codes, "")
$aUkrShift_Codes = StringSplit($sUkrShift_Codes, "")
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 & " - " & Asc($sChar), 0, 80)
SoundPlay($sSound) ;проигрывать звук при нажатии
Case Else ; если была нажата не буква и не цыфра, то выход из функции
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==Asc($aSearch_Array[$i]) Then
$nKeyCode=Asc($aReplace_Array[$i])
Return Chr($nKeyCode)
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
dasksting
01-09-2010, 10:41
а как можно усовершенствовать скрипт чтобы допусти отслеживать (пробел, кнопки мыши, цифровую клавиатуру) ? второй день сижу не могу догнать, спасайте люди добрые :)
а как можно усовершенствовать скрипт чтобы допусти отслеживать (пробел, кнопки мыши, цифровую клавиатуру) ? второй день сижу не могу догнать, спасайте люди добрые »
Нужно так:
#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,"код нужной клавиши", $nKeyCode) ;с помощью этого узнаем код нужной нам клавиши
Switch $nKeyCode
Case 65 To 90, 48 To 57, 186 To 192, 219, 221, 222, 106 ; проверяться будут только нажатия на буквы и цифры и еще клавиши минус и плюс, что после клавиши 0, а код 106 соответствует клавише *
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 & " - " & Asc($sChar), 0, 80)
SoundPlay($sSound) ;проигрывать звук при нажатии
Case Else ; если была нажата не буква и не цыфра, то выход из функции
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
$nKeyCode=Asc($aReplace_Array[$i])
Return Chr($nKeyCode)
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()
Local $sCapt_Codes, $sEng_Codes, $sEngShift_Codes, $sRus_Codes, $sRusShift_Codes
Local $sUkr_Codes, $sUkrShift_Codes
Global $aEng_Codes, $aEngShift_Codes, $aRus_Codes, $aRusShift_Codes, $aUkr_Codes, $aUkrShift_Codes
$sEng_Codes = _
"`qwertyuiop[]asdfghjkl;'zxcvbnm,./" & _
"1234567890-=*"
$sEngShift_Codes = _
'~QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>?' & _
'!@#$%^&*()_+*'
$sRus_Codes = _
"ёйцукенгшщзхъфывапролджэячсмитьбю." & _
"1234567890-=*"
$sRusShift_Codes = _
'ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,' & _
'!"№;%:?*()_+*'
$sUkr_Codes = _
"'йцукеягшщзхЇфівапролджєнчсмитьбю." & _
"1234567890-=*"
$sUkrShift_Codes = _
"’ЙЦУКЕЯГШЩЗХЇФІВАПРОЛДЖЄНЧСМИТЬБЮ," & _
'!"№;%:?*()_+*'
;
Global $aCapture_Codes[48]
;АQWERTYUIOPЫЭASDFGHJKLєЮZXCVBNMјѕї1234567890Ѕ»*
$aCapture_Codes[0]=47 ;общее кол.ячеек массива
$aCapture_Codes[1]=192 ;A
$aCapture_Codes[2]=81 ;Q
$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 ;*
;
$aEng_Codes = StringSplit($sEng_Codes, "")
$aEngShift_Codes = StringSplit($sEngShift_Codes, "")
$aRus_Codes = StringSplit($sRus_Codes, "")
$aRusShift_Codes = StringSplit($sRusShift_Codes, "")
$aUkr_Codes = StringSplit($sUkr_Codes, "")
$aUkrShift_Codes = StringSplit($sUkrShift_Codes, "")
EndFunc
Если ты уже 2 день пытаешся, то думаю поймеш суть, сдесь я добавил клавишу <*>, код которой 106, по аналогии добавиш то что тебе нужно, кроме кнопки мыши конечно... Скрипт наверное можно оптимизировать, но на это нету времени, главное же суть.
dasksting
03-09-2010, 07:15
обалдеть!!!!! Я бы без тебя вообще бы не разобрался, оказалось все очень даже просто, не думал в этом направлении!!!! СПАСИБО тебе ОГРОМНОЕ!!!
dasksting
03-09-2010, 07:34
а допустим смотри, я прописал клавишу Enter, а как сделать чтобы он в тултипе выводил не 1 букву а слово Enter ?
dasksting
03-09-2010, 08:09
сделал пока так
if Asc($sChar) = $enter then
ToolTip("Enter", 0, 80)
ElseIf Asc($sChar) = $backspace Then
ToolTip("{BackSpace}", 0, 80)
ElseIf Asc($sChar) = $space Then
ToolTip("{Space}", 0, 80)
ElseIf Asc($sChar) = $tab Then
ToolTip("{Tab}", 0, 80)
else
ToolTip($sChar, 0, 80)
endif
сделал пока так »
Если тебе требуется узнавать только название нажатой клавиши, то можно вот так:
#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
TERMINAL
21-02-2011, 10:17
У меня почему то всеровно с цифровой клавиатуры набор не идёт, не могу понять как сделать, какие кода символов...
beve
Что то не пойму через что он цикл проверки крутит Там же голый цикл со слипом и функции Через что эти функции вызывваются?
Через что эти функции вызывваются? »
Global $hHook = DllCall("user32.dll", "hwnd", "SetWindowsHookEx", "int", $WH_KEYBOARD_LL, _
"ptr", DllCallbackGetPtr($hStub_KeyProc), "hwnd", $hMod[0], "dword", 0) »
SetWindowsHookEx function (Windows) (https://msdn.microsoft.com/en-us/library/windows/desktop/ms644990%28v=vs.85%29.aspx)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.