Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Отслеживание нажатий клавиш на клавиатуре (чтоб узнать код нажатой клавиши) (http://forum.oszone.net/showthread.php?t=148585)

beve 22-08-2009 00:43 1199908

Отслеживание нажатий клавиш на клавиатуре (чтоб узнать код нажатой клавиши)
 
Вопрос такой: нужно отслеживать нажатие клавиш на клавиатуре и если какая то клавиша нажата, вывести ее скан код, для примера, в ToolTip. (Хочу потом сделать чтото подобное, что есть у Punto Switcher-a, тоесть чтоб озвучивались нажатые клавиши в русской расскладке - одним звуком, в английской - другим, а в украинском - третьим. ) Есть код CreatoR-а: Ссылка, который я вот немного упростил, чтоб показать что мне нужно:
Код:

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.

Creat0R 22-08-2009 01:01 1199918

Цитата:

Цитата beve
как изменить этот код, или сделать еще проще, чтоб в ToolTip показывался скан код нажатой клавиши »

ToolTip($nKeyCode, 0, 80)?

beve 22-08-2009 01:41 1199930

Я специально сделал ToolTip($sBuffer , 0, 80) для примера, чтоб показать всем, что если нажать например на русскую букву а, при русской расскладке, то что будет показано в ToolTip при текущем коде, а мне нужно чтоб там была буква а, и ее код.

Creat0R 22-08-2009 02:12 1199936

Цитата:

Цитата 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


beve 22-08-2009 19:46 1200521

Спасибо, за идею. Вот, сделал то что было непонятно (а то в приведенном выше примере "не работали" некоторые клавиши-ю,х,ъ...):
Код:

#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,088,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


Creat0R 22-08-2009 23:47 1200740

Цитата:

Цитата beve
Вот, сделал »

Да... вижу ты не экономил на коде

Я бы сократил так:

Код:

#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


beve 23-08-2009 01:37 1200816

Цитата:

Цитата Creat0R
Я бы сократил так: »

Согласен, так выглядет получше! И почти все работает, но вот при украинской расскладке, если набирать буквы в нижнем регистре, то набирается не то: при наборе символов абвгдеєжзиіїйклмнопрстуахцчшщюяь - в ToolTip показываются вьінлкждщмфх'уосZрапчицвзйягшбетс...А в верхнем регистре (при удерживании Shift) набирается то что нужно.
У себя в примере, я тоже заморочился немного с укр раскладкой, но там проблема была в трех местах, а тут? Может тебе понятней почему тут так?

Creat0R 23-08-2009 02:52 1200856

Цитата:

Цитата beve
но вот при украинской расскладке »

Сорри, я в украинском не бум бум, и ставить её для проверки пока не могу, у меня были серъёзные траблы с раскладками, пока наладилось, трогать не хочется, чтобы не испортить :pray:

P.S
Но могу предложить использовать всё же мой метод, с реальными буквами в массиве, а не кодами - так будет легче для разбора в дальнейшем.

beve 23-08-2009 16:57 1201195

Цитата:

Цитата Creat0R
Но могу предложить использовать всё же мой метод, с реальными буквами в массиве, а не кодами - так будет легче для разбора в дальнейшем. »

Согласился и переделал. Кажись теперь всё :) :
Код:

#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 1486254

а как можно усовершенствовать скрипт чтобы допусти отслеживать (пробел, кнопки мыши, цифровую клавиатуру) ? второй день сижу не могу догнать, спасайте люди добрые :)

beve 02-09-2010 11:07 1487014

Цитата:

Цитата dasksting
а как можно усовершенствовать скрипт чтобы допусти отслеживать (пробел, кнопки мыши, цифровую клавиатуру) ? второй день сижу не могу догнать, спасайте люди добрые »

Нужно так:
читать дальше »
Код:

#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 1487605

обалдеть!!!!! Я бы без тебя вообще бы не разобрался, оказалось все очень даже просто, не думал в этом направлении!!!! СПАСИБО тебе ОГРОМНОЕ!!!

dasksting 03-09-2010 07:34 1487614

а допустим смотри, я прописал клавишу Enter, а как сделать чтобы он в тултипе выводил не 1 букву а слово Enter ?

dasksting 03-09-2010 08:09 1487624

сделал пока так

Код:

      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


beve 03-09-2010 15:06 1487902

Цитата:

Цитата dasksting
сделал пока так »

Если тебе требуется узнавать только название нажатой клавиши, то можно вот так:
Код:

#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 1618167

У меня почему то всеровно с цифровой клавиатуры набор не идёт, не могу понять как сделать, какие кода символов...

RRAVSS 23-03-2015 01:54 2486287

beve
Что то не пойму через что он цикл проверки крутит Там же голый цикл со слипом и функции Через что эти функции вызывваются?

Iska 23-03-2015 02:14 2486291

Цитата:

Цитата RRAVSS
Через что эти функции вызывваются? »

Цитата:

Цитата beve
Global $hHook = DllCall("user32.dll", "hwnd", "SetWindowsHookEx", "int", $WH_KEYBOARD_LL, _
"ptr", DllCallbackGetPtr($hStub_KeyProc), "hwnd", $hMod[0], "dword", 0) »

SetWindowsHookEx function (Windows)


Время: 16:50.

Время: 16:50.
© OSzone.net 2001-