Tipp 4.7 - CapsLock, NumLock und ScrollLock

Welche Methoden gibt es für die Tasten CapsLock, NumLock und ScrollLock?

Mit dieser Funktion können Sie ermitteln, welche Methoden es für die Tasten CapsLock, NumLock und ScrollLock gibt. Kopieren Sie einfach nachfolgenden Quellcode in die Zwischenablage und fügen Sie anschließend den Inhalt der Zwischenablage in ein neues Modul ein. Die Aufrufparameter finden Sie im Quellcode beschrieben.

Api-AufrufeVerwendete Win32-Api-Aufrufe und Typen: GetVersionEx, keybd_event, MapVirtualKey, GetKeyState, SetKeyboardState, GetKeyboardState- OSVERSIONINFO

Beispiel:

Option Explicit
'// --------------------------------------------------------------------
'// Verschiedene Methoden zu den Tasten CapsLock, NumLock und ScrollLock
'// --------------------------------------------------------------------
'// Methode          |Beschreibung
'// --------------------------------------------------------------------
'// CapsLock         |Ermittelt den Status der CapsLock-Taste
'// --------------------------------------------------------------------
'// NumLock          |Ermittelt den Status der NumLock-Taste
'// --------------------------------------------------------------------
'// ScrollLock       |Ermittelt den Status der ScrollLock-Taste
'// --------------------------------------------------------------------
'// SetCapsLock      |Setzt den Status der CapsLock-Taste
'// --------------------------------------------------------------------
'// SetScrollLock    |Setzt den Status der ScrollLock-Taste
'// --------------------------------------------------------------------
'// SetNumLock       |Setzt den Status der NumLock-Taste
'// --------------------------------------------------------------------
'// ToggleCapsLock   |Schaltet die CapsLock-Taste ein- bzw. aus
'// --------------------------------------------------------------------
'// ToggleScrollLock |Schaltet die ScrollLock-Taste ein- bzw. aus
'// --------------------------------------------------------------------
'// ToggleNumLock    |Schaltet die NumLock-Taste ein- bzw. aus
'// --------------------------------------------------------------------
 
Public Const KEYEVENTF_EXTENDEDKEY As Long = &H1
Public Const KEYEVENTF_KEYUP       As Long = &H2
Public Const VK_CAPITAL            As Long = &H14
Public Const VK_NUMLOCK            As Long = &H90
Public Const VK_SCROLL             As Long = &H91
 
Public Type OSVERSIONINFO
            dwOSVersionInfoSize    As Long
            dwMajorVersion         As Long
            dwMinorVersion         As Long
            dwBuildNumber          As Long
            dwPlatformID           As Long
            szCSDVersion           As String * 128
End Type
 
Public Type KeyboardBytes
            kbByte(0 To 255)       As Byte
End Type
 
Public kbArray                     As KeyboardBytes
 
Public Declare Function GetVersionEx Lib "kernel32" Alias _
                       "GetVersionExA" _
                       (lpVersionInformation As OSVERSIONINFO) As Long
 
Public Declare Sub keybd_event Lib "user32" _
                       (ByVal bVk As Byte, _
                        ByVal bScan As Byte, _
                        ByVal dwFlags As Long, _
                        ByVal dwExtraInfo As Long)
 
Public Declare Function MapVirtualKey Lib "user32" Alias _
                       "MapVirtualKeyA" _
                       (ByVal wCode As Long, _
                        ByVal wMapType As Long) As Long
 
Public Declare Function GetKeyState Lib "user32" _
                       (ByVal nVirtKey As Long) As Long
 
Public Declare Function SetKeyboardState Lib "user32" _
                       (kbArray As KeyboardBytes) As Long
 
Public Declare Function GetKeyboardState Lib "user32" _
                       (kbArray As KeyboardBytes) As Long
 
Public Function CapsLock() As Boolean
'// ================================================================
'// Funktion ermittelt den Status der CapsLock-Taste und gibt
'// True (eingeschaltet) oder False (ausgeschaltet) wieder.
'// ================================================================
    CapsLock = GetKeyState(VK_CAPITAL) And 1 = 1
 
End Function
 
Public Function NumLock() As Boolean
'// ================================================================
'// Funktion ermittelt den Status der NumLock-Taste und gibt
'// True (eingeschaltet) oder False (ausgeschaltet) wieder.
'// ================================================================
    NumLock = GetKeyState(VK_NUMLOCK) And 1 = 1
 
End Function
 
Public Function ScrollLock() As Boolean
'// ================================================================
'// Funktion ermittelt den Status der ScrollLock-Taste und gibt
'// True (eingeschaltet) oder False (ausgeschaltet) wieder.
'// ================================================================
    ScrollLock = GetKeyState(VK_SCROLL) And 1 = 1
 
End Function
 
Public Function SetCapsLock(bState As Boolean) As Boolean
'// ================================================================
'// Funktion setzt den Status der CapsLock-Taste anhand des über-
'// gebenen Statuswertes bState=True (eingeschaltet) oder
'// bState=False (ausgeschaltet). Bei Erfolg gibt Funktion True
'// bzw. False zurück.
'// ================================================================
'// Achtung: Funktioniert nur korrekt unter Windows 9x/ME!
'// Unter WinNT wird der Status gesetzt aber die Kontroll-Lampe
'// nicht ein-/ausgeschaltet!
'// ================================================================
    If Not IsWinNT Then
        GetKeyboardState kbArray
        kbArray.kbByte(VK_CAPITAL) = 1
        SetKeyboardState kbArray
        If bState = True Then
            SetCapsLock = IIf(CapsLock() = 1, True, False)
        Else 'If bState = False
            SetCapsLock = IIf(CapsLock() = 0, True, False)
        End If
    Else
    '// ============================================================
    '// Simmulation des Tastendrucks nur wenn notwendig!
    '// ============================================================
        SetCapsLock = True 'da ohne Prüfung
        If bState = CapsLock Then Exit Function
        ToggleCapsLock
    End If
 
End Function
 
Public Function SetScrollLock(bState As Boolean) As Boolean
'// ================================================================
'// Funktion setzt den Status der ScrollLock-Taste anhand des über-
'// gebenen Statuswertes bState=True (eingeschaltet) oder
'// bState=False (ausgeschaltet). Bei Erfolg gibt Funktion True
'// bzw. False zurück.
'// ================================================================
'// Achtung: Funktioniert nur korrekt unter Windows 9x/ME!
'// Unter WinNT wird der Status gesetzt aber die Kontroll-Lampe
'// nicht ein-/ausgeschaltet!
'// ================================================================
    If Not IsWinNT Then
        GetKeyboardState kbArray
        kbArray.kbByte(VK_SCROLL) = 1
        SetKeyboardState kbArray
        If bState = True Then
            SetScrollLock = IIf(ScrollLock() = 1, True, False)
        Else 'If bState = False
            SetScrollLock = IIf(ScrollLock() = 0, True, False)
        End If
    Else
    '// ============================================================
    '// Simmulation des Tastendrucks nur wenn notwendig!
    '// ============================================================
        SetScrollLock = True 'da ohne Prüfung
        If bState = ScrollLock Then Exit Function
        ToggleScrollLock
    End If
 
End Function
 
Public Function SetNumLock(bState As Boolean) As Boolean
'// ================================================================
'// Funktion setzt den Status der NumLock-Taste anhand des über-
'// gebenen Statuswertes bState=True (eingeschaltet) oder
'// bState=False (ausgeschaltet). Bei Erfolg gibt Funktion True
'// bzw. False zurück.
'// ================================================================
'// Achtung: Funktioniert nur korrekt unter Windows 9x/ME!
'// Unter WinNT wird der Status gesetzt aber die Kontroll-Lampe
'// nicht ein-/ausgeschaltet!
'// ================================================================
    If Not IsWinNT Then
        GetKeyboardState kbArray
        kbArray.kbByte(VK_NUMLOCK) = 1
        SetKeyboardState kbArray
        If bState = True Then
            SetNumLock = IIf(NumLock() = 1, True, False)
        Else 'If bState = False
            SetNumLock = IIf(NumLock() = 0, True, False)
        End If
    Else
    '// ============================================================
    '// Simmulation des Tastendrucks nur wenn notwendig!
    '// ============================================================
        SetNumLock = True 'da ohne Prüfung
        If bState = NumLock Then Exit Function
        ToggleNumLock
    End If
 
End Function
 
Public Sub ToggleCapsLock()
'// ================================================================
'// Funktion schaltet den Status der CapsLock-Taste ein- bzw. aus.
'// ================================================================
'// Achtung: Funktioniert nur korrekt unter Windows 9x/ME!
'// Unter WinNT wird der Status gesetzt aber die Kontroll-Lampe
'// nicht ein-/ausgeschaltet!
'// ================================================================
    If Not IsWinNT Then
        GetKeyboardState kbArray
        kbArray.kbByte(VK_CAPITAL) = IIf(kbArray.kbByte(VK_CAPITAL) = 1, 0, 1)
        SetKeyboardState kbArray
    Else
    '// ============================================================
    '// Simmulation: Taste wird gedrückt
    '// ============================================================
        Call keybd_event(vbKeyCapital, _
                         MapVirtualKey(vbKeyCapital, 0), _
                         KEYEVENTF_EXTENDEDKEY Or 0, 0)
    '// ============================================================
    '// Simmulation: Taste wird freigegeben
    '// ============================================================
        Call keybd_event(vbKeyCapital, MapVirtualKey(vbKeyCapital, 0), _
                         KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
    End If
 
End Sub
 
Public Sub ToggleScrollLock()
'// ================================================================
'// Funktion schaltet den Status der ScrollLock-Taste ein- bzw. aus.
'// ================================================================
'// Achtung: Funktioniert nur korrekt unter Windows 9x/ME!
'// Unter WinNT wird der Status gesetzt aber die Kontroll-Lampe
'// nicht ein-/ausgeschaltet!
'// ================================================================
    If Not IsWinNT Then
        GetKeyboardState kbArray
        kbArray.kbByte(VK_SCROLL) = IIf(kbArray.kbByte(VK_SCROLL) = 1, 0, 1)
        SetKeyboardState kbArray
    Else
    '// ============================================================
    '// Simmulation: Taste wird gedrückt
    '// ============================================================
        Call keybd_event(vbKeyScrollLock, _
                         MapVirtualKey(vbKeyScrollLock, 0), _
                         KEYEVENTF_EXTENDEDKEY Or 0, 0)
    '// ============================================================
    '// Simmulation: Taste wird freigegeben
    '// ============================================================
        Call keybd_event(vbKeyScrollLock, MapVirtualKey(vbKeyScrollLock, 0), _
                         KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
    End If
 
End Sub
 
Public Sub ToggleNumLock()
'// ================================================================
'// Funktion schaltet den Status der NumLock-Taste ein- bzw. aus.
'// ================================================================
'// Achtung: Funktioniert nur korrekt unter Windows 9x/ME!
'// Unter WinNT wird der Status gesetzt aber die Kontroll-Lampe
'// nicht ein-/ausgeschaltet!
'// ================================================================
    If Not IsWinNT Then
        GetKeyboardState kbArray
        kbArray.kbByte(VK_NUMLOCK) = IIf(kbArray.kbByte(VK_NUMLOCK) = 1, 0, 1)
        SetKeyboardState kbArray
    Else
    '// ============================================================
    '// Simmulation: Taste wird gedrückt
    '// ============================================================
        Call keybd_event(vbKeyNumlock, _
                         MapVirtualKey(vbKeyNumlock, 0), _
                         KEYEVENTF_EXTENDEDKEY Or 0, 0)
    '// ============================================================
    '// Simmulation: Taste wird freigegeben
    '// ============================================================
        Call keybd_event(vbKeyNumlock, MapVirtualKey(vbKeyNumlock, 0), _
                         KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
    End If
 
End Sub
 
Public Property Get IsWinNT() As Boolean
 
    Const VER_PLATFORM_WIN32_NT As Long = 2
    Dim uOSVer                  As OSVERSIONINFO
 
    uOSVer.dwOSVersionInfoSize = Len(uOSVer)
    GetVersionEx uOSVer
    IsWinNT = (uOSVer.dwPlatformID = VER_PLATFORM_WIN32_NT)
 
End Property