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.
Verwendete 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