Scroll Lock- / Num Lock-Status

  • Hallo

    ich moechte den Status der Tasten Capslock, Scroll Lock und Num Lock herausfinden.

    Folgender Code funktioniert nur richtig fuer Capslock,
    bei Scroll Lock und Num Lock sagt er immer, dass beide aktiv sind, ungeachtet des eigentlichen Status...

    (Ich habe schon ausfuehrlich getestet, dass es an dem Script liegt und nicht an einer eventuellen Unfaehigkeit Scroll Lock und Num Lock zu druecken!)

    Code:

    Spoiler anzeigen
    [autoit]

    ;...
    ;...
    ;...

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $VK_CAPITAL = 0x14
    Global Const $VK_SCROLL = 0x91
    Global Const $VK_NUMLOCK = 0x90

    [/autoit] [autoit][/autoit] [autoit]

    ;...
    ;...
    ;...

    [/autoit] [autoit][/autoit] [autoit]

    getCapsLock()
    getScrollLock()
    getNumLock()

    [/autoit] [autoit][/autoit] [autoit]

    If getCapsLock() Then
    $capsLockOn = True
    Else
    $capsLockOn = False
    EndIf
    If getScrollLock() Then
    $scrollLockOn = True
    Else
    $scrollLockOn = False
    EndIf
    If getNumLock() Then
    $numLockOn = True
    Else
    $numLockOn = False
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ;...
    ;...
    ;...

    [/autoit] [autoit][/autoit] [autoit]

    Func getCapsLock()
    Local $ret
    $ret = DllCall("user32.dll", "long", "GetKeyState", "long", $VK_CAPITAL)
    Return $ret[0]
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func getScrollLock()
    Local $ret
    $ret = DllCall("user32.dll", "long", "GetKeyState", "long", $VK_SCROLL)
    Return $ret[0]
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func getNumLock()
    Local $ret
    $ret = DllCall("user32.dll", "long", "GetKeyState", "long", $VK_NUMLOCK)
    Return $ret[0]
    EndFunc

    [/autoit]


    Kann mir da eventuell jemand weiterhelfen?

    Einmal editiert, zuletzt von pete_gzome (28. Oktober 2011 um 15:18)

  • Du hast vollkommen Recht! Ich hatte den Rueckgabewert irgendwie gar nicht abgefragt...

    Ich habe ein bisschen im Internet gesucht und benutze jetzt die Funktion

    [autoit]

    Func _Key_Is_On($nVK_KEY, $vDLL = 'user32.dll')
    Local $a_Ret = DllCall($vDLL, "short", "GetKeyState", "int", $nVK_KEY)
    Return Not @error And BitAND($a_Ret[0], 0xFF) = 1
    EndFunc

    [/autoit]


    und den Code

    [autoit]

    If _Key_Is_On($VK_CAPITAL) Then
    $capsLockOn = True
    Else
    $capsLockOn = False
    EndIf
    If _Key_Is_On($VK_SCROLL) Then
    $scrollLockOn = True
    Else
    $scrollLockOn = False
    EndIf
    If _Key_Is_On($VK_NUMLOCK) Then
    $numLockOn = True
    Else
    $numLockOn = False
    EndIf

    [/autoit]


    und es funktioniert einwandfrei.

    Danke dir!

    3 Mal editiert, zuletzt von pete_gzome (28. Oktober 2011 um 15:18)