Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата beve:
Я специально сделал ToolTip($sBuffer , 0, 80) для примера »
В твоём вопросе в первом сообщении было явно указано:

Цитата beve:
Вопрос такой: нужно отслеживать нажатие клавиш на клавиатуре и если какая то клавиша нажата, вывести ее скан код, для примера, в ToolTip »
А я не заметил что $sBuffer это Chr($nKeyCode) & " - " & $nKeyCode

Теперь это уже вторая задача...

Цитата beve:
мне нужно чтоб там была буква а, и ее код »
Код: Выделить весь код
#include <Misc.au3>

HotKeySet("{ESC}", "OnAutoItExit")

Global $nOld_KC = -1

Global Const $WH_KEYBOARD_LL = 13
Global $sBuffer = ""
Global $hStub_KeyProc = DllCallbackRegister("_KeyProc", "int", "int;ptr;ptr")
Global $hMod = DllCall("kernel32.dll", "hwnd", "GetModuleHandle", "ptr", 0)
Global $hHook = DllCall("user32.dll", "hwnd", "SetWindowsHookEx", "int", _
        $WH_KEYBOARD_LL, "ptr", DllCallbackGetPtr($hStub_KeyProc), "hwnd", $hMod[0], "dword", 0)

MsgBox(4096, "", "Type anything anywhere and it will appear in the top left corner of the screen.")

While 1
    Sleep(10)
WEnd

Func EvaluateKey($nKeyCode)
    $nOld_KC = $nKeyCode
    If $nKeyCode < 65 Or $nKeyCode > 90 Then Return ;Исключаем всё кроме алфавитных букв

    Local $sChar = Chr($nKeyCode)

    Switch _WinGetKeyboardLayout(WinGetHandle("[ACTIVE]"))
        Case 0409
            ;
        Case 0419
            Local $aANSI_Chars = StringSplit("ёйцукенгшщзхъфывапролджэячсмитьбю.?", "")
            Local $aASCII_Chars = StringSplit("`qwertyuiop[]asdfghjkl;'zxcvbnm,./&", "")

            For $i = 1 To $aANSI_Chars[0]
                $sChar = StringReplace($sChar, $aASCII_Chars[$i], $aANSI_Chars[$i])
            Next

            $sChar = StringUpper($sChar) ;По умолчанию у нас же в верхнем регистре :)
    EndSwitch

    If Not _IsPressed(10) Then $sChar = StringLower($sChar)

    $sBuffer = $sChar & " - " & $nKeyCode
    ToolTip($sBuffer, 0, 80)
EndFunc

Func _KeyProc($nCode, $wParam, $lParam)
    Local $aRet, $KEYHOOKSTRUCT

    If $nCode < 0 Then
        $aRet = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hHook[0], "int", $nCode, "ptr", $wParam, "ptr", $lParam)
        Return $aRet[0]
    EndIf

    If $wParam = 256 Then
        $KEYHOOKSTRUCT = DllStructCreate("dword;dword;dword;dword;ptr", $lParam)
        EvaluateKey(DllStructGetData($KEYHOOKSTRUCT, 1))
    EndIf

    $aRet = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hHook[0], "int", $nCode, "ptr", $wParam, "ptr", $lParam)
    Return $aRet[0]
EndFunc

Func _WinGetKeyboardLayout($hWnd)
    Local $aRet = DllCall("user32.dll", "long", "GetWindowThreadProcessId", "hwnd", $hWnd, "ptr", 0)
    $aRet = DllCall("user32.dll", "long", "GetKeyboardLayout", "long", $aRet[0])

    Return "0000" & Hex($aRet[0], 4)
EndFunc

Func OnAutoItExit()
    If $hStub_KeyProc Then DllCallbackFree($hStub_KeyProc)
    $hStub_KeyProc = 0
    DllCall("user32.dll", "int", "UnhookWindowsHookEx", "hwnd", $hHook[0])
    If @HotKeyPressed <> "" Then Exit
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 22-08-2009 в 02:23.

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:12, 22-08-2009 | #4