Что нового

[Мышь, клавиатура] Tooltip нажатой кнопки

autobin

Новичок
Сообщения
2
Репутация
0
[size=14pt][size=10pt]Здравствуйте, уважаемые форумчане!
Изучая данный язык, возясь с присвоениями горячих клавиш + примеры из сети, понадобилось вывести на экран нажимаемые клавиши. Есть рабочий код, но она кириллицу не выводит, в чем может быть проблема?
[/size][/size]

Код:
Opt("SendKeyDelay", 0)

Global $i, $j, $k, $l, $button

#Region ADD CHARACTERS
    #Region UTF-8 Letters
        For $i = 0 To 65536
            HotKeySet(ChrW($i), "Capt")
        Next
    #EndRegion UTF-8 Letters

    #Region ASCII Letters
        For $l = 0 To 255
            HotKeySet(Chr($l), "Capt")
        Next
    #EndRegion ASCII Letters

    #Region Function chars
        For $j = 1 To 12
            HotKeySet("{F" & $j & "}", "Capt")
        Next
    #EndRegion Function chars

    #Region Numpad numbers
        For $k = 0 To 9
            HotKeySet("{NUMPAD" & $k & "}", "Capt")
        Next
    #EndRegion Numpad numbers

    #Region Numpad Stuffs
        HotKeySet("{NUMPADENTER}", "Capt")
        HotKeySet("{NUMPADMULT}", "Capt")
        HotKeySet("{NUMPADADD}", "Capt")
        HotKeySet("{NUMPADSUB}", "Capt")
        HotKeySet("{NUMPADDIV}", "Capt")
        HotKeySet("{NUMPADDOT}", "Capt")
    #EndRegion Numpad Stuffs

    #Region Arrows
        HotKeySet("{RIGHT}", "Capt")
        HotKeySet("{DOWN}", "Capt")
        HotKeySet("{LEFT}", "Capt")
        HotKeySet("{UP}", "Capt")
    #EndRegion Arrows

    #Region Special Buttons
        HotKeySet("{DELETE}", "Capt")
        HotKeySet("{INSERT}", "Capt")
        HotKeySet("{PGUP}", "Capt")
        HotKeySet("{PGDN}", "Capt")
        HotKeySet("{HOME}", "Capt")
        HotKeySet("{END}", "Capt")
    #EndRegion Special Buttons

    #Region Others
        HotKeySet("{PRINTSCREEN}", "Capt")
        HotKeySet("{APPSKEY}", "Capt")
        HotKeySet("{LWIN}", "Capt")
        HotKeySet("{RWIN}", "Capt")
        HotKeySet("{TAB}", "Capt")
    #EndRegion Others
#EndRegion ADD CHARACTERS

ToolTip ($button, 0, 0, $button)

While 1
    Sleep(500)
WEnd

Func Capt()
    $button = @HotKeyPressed

    If _GetCaps() = 1 Then
        If StringInStr($button, StringUpper($button), 1) = 1 Then
            $button = StringLower($button)
        Else
            $button = StringUpper($button)
        EndIf
    EndIf

    If $button = "+3" Then
ToolTip ($button, 0, 0, $button)
    Elseif $button = "+4" Then
ToolTip ($button, 0, 0, $button)
    Else
ToolTip ($button, 0, 0, $button)
    EndIf

    If $button = "{ENTER}" Then ToolTip ($button, 0, 0, $button)

    HotKeySet($button)
    ControlSend("", "", "", $button)
    HotKeySet($button, "Capt")
EndFunc

Func _GetCaps()
    $ret = DllCall("user32.dll", "long", "GetKeyState", "long", 0x14)
    Return $ret[0]
EndFunc
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
autobin
Ты псих.

Код:
_WinAPI_SetWindowsHookEx


Код:
$hWnd = WinGetHandle( "[ACTIVE]" )
_WinAPI_GetKeyboardLayout($hWnd)


Примеры к этим функциям есть в справке.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
edyapd
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646296%28v=vs.85%29.aspx

Return value:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd318691(v=vs.85).aspx
 
Автор
A

autobin

Новичок
Сообщения
2
Репутация
0
firex сказал(а):
autobin
Ты псих.

Код:
_WinAPI_SetWindowsHookEx


Код:
$hWnd = WinGetHandle( "[ACTIVE]" )
_WinAPI_GetKeyboardLayout($hWnd)


Примеры к этим функциям есть в справке.
не получается эту функцию добавить даже когда объявлена
еще надо наверное и функцию замены выводимых букв дабавить?
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Код:
#include <WinAPIEx.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>

Global $hKbHook, $cbKeyProc
; ---
OnAutoItExitRegister("__Cleanup")

$cbKeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
$hKbHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($cbKeyProc), _WinAPI_GetModuleHandle(0))

While Sleep(10)
WEnd

Func _KeyProc( $nCode, $wParam, $lParam )
    Local $tKBHOOK, $vLang, $iFlags
	; ---
	If $nCode >= 0 Then
		$tKBHOOK = DllStructCreate( $tagKBDLLHOOKSTRUCT, $lParam )

		$vLang = _WinAPI_GetKeyboardLayout( WinGetHandle( "[ACTIVE]" ) )
		ConsoleWrite( ">Lang=" & $vLang & "; Key=")
		; *
		If $wParam = $WM_KEYDOWN Then
			ConsoleWrite( $tKBHOOK.vkCode & @CRLF)
		Else
			Switch $tKBHOOK.Flags
				Case $LLKHF_ALTDOWN
					ConsoleWrite("ALTDOWN" & @CRLF)
				Case $LLKHF_EXTENDED
					ConsoleWrite("EXTENDED" & @CRLF)
				Case $LLKHF_INJECTED
					ConsoleWrite("INJECTED" & @CRLF)
				Case $LLKHF_UP
					ConsoleWrite( $tKBHOOK.vkCode & " (UP)" & @CRLF)
				Case Else
					ConsoleWrite( @CRLF )
			EndSwitch
		EndIf
    EndIf
    Return _WinAPI_CallNextHookEx($hKbHook, $nCode, $wParam, $lParam)
EndFunc

Func __Cleanup()
	If $hKbHook Then _
		_WinAPI_UnhookWindowsHookEx($hKbHook)

    DllCallbackFree($cbKeyProc)
EndFunc
 
Верх