Tipp 0006 Caps-, Scroll- und Num-Lock-Taste steuern
Autor/Einsender:
Datum:
  Jürgen Anke
Update: 10.01.2008
Entwicklungsumgebung:   VB 6
Die Caps-, Scroll- und Num-Lock-Tasten haben gemeinsam, dass Sie durch jeden Tastendruck entweder ein- oder ausgeschaltet sind. Auf den meisten Tastaturen wird ihr derzeitiger Zustand durch drei LED's über dem Ziffernblock angezeigt.
Um diese Tasten nun auch Betriebssystemübergreifend  steuern zu können, muss mittels der API GetVersionEx zuerst das Betriebsystem ermittelt werden. Abhängig davon unterscheidet sich die Vorgehensweise gravierend.
Windows 9x, Me:
Der Zustand lässt sich mit den API-Funktionen GetKeyState und GetKeyboardState ermitteln, und mit SetKeyboardState neu setzen. Um jedoch eine Änderung herbeizuführen, muss mit GetKeyboardState der Keyboardzustand als Array abgerufen werden, in dem nun die gewünschten Änderungen vorgenommen werden können, und mit SetKeyboardState wird das Array wieder an das System übergeben.
Windows NT, 2000, XP, Vista, Win 7:
Die API-Funktion GetKeyState liefert den Zustand der Taste, und mittels der API-Funktion  keybd_event wird Key Press sowie Key Release entsprechend der gewählten Taste ohne Umwege simuliert.
Update durch Thomas Becker:
Der Tipp und die Beschreibung wurde komplett überarbeitet, um die NT-basierten Betriebssystem erweitert, und der Quellcode im Download-Beispiel wurde entsprechend kommentiert.
 
Option Explicit

Private Declare Function GetVersionEx Lib "kernel32" Alias _
    "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
    ByVal bScan As Byte, ByVal dwFlags As Long, _
    ByVal dwExtraInfo As Long)
Private Declare Function GetKeyState Lib "user32" (ByVal _
    nVirtKey As Long) As Integer
Private Declare Function GetKeyboardState Lib "user32" (ByVal _
    lppbKeyState As String) As Long
Private Declare Function SetKeyboardState Lib "user32" (ByVal _
    lppbKeyState As String) As Long

Private Type OSVERSIONINFO
  dwOSVersionInfoSize As Long
  dwMajorVersion As Long
  dwMinorVersion As Long
  dwBuildNumber As Long
  dwPlatformId As Long
  szCSDVersion As String * 128
End Type

Const VK_CAPITAL = &H14
Const VK_NUMLOCK = &H90
Const VK_SCROLL = &H91
Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2
Const VER_PLATFORM_WIN32_NT = 2
Const VER_PLATFORM_WIN32_WINDOWS = 1

Private Sub Form_Load()
  Timer1_Timer
End Sub

Private Sub cmdKey_Click(Index As Integer)
  Dim Key As Integer
  Dim o As OSVERSIONINFO

  Select Case Index
    Case 0
      Key = VK_NUMLOCK
    Case 1
      Key = VK_CAPITAL
    Case 2
      Key = VK_SCROLL
    Case 3
      Unload Me
      Exit Sub
  End Select

  o.dwOSVersionInfoSize = Len(o)
  GetVersionEx o

  If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then ' Win9x
     Dim keys(0 To 255) As Byte
     GetKeyboardState keys(0) ' Keyboardzustand empfangen
     If GetKeyState(Key) = 0 Then keys(Key) = 1 Else keys(Key) = 0
     SetKeyboardState keys(0) 'Keyboardzustand senden
  ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then ' NT, XP usw.
     keybd_event Key, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
     keybd_event Key, &H45, KEYEVENTF_EXTENDEDKEY Or _
        KEYEVENTF_KEYUP, 0
  End If
End Sub

Private Sub Timer1_Timer()
  Dim Aus As Long, Tasten(0 To 2) As Integer, i As Integer

  Aus = RGB(0, 128, 0)
  Tasten(0) = VK_NUMLOCK
  Tasten(1) = VK_CAPITAL
  Tasten(2) = VK_SCROLL

  For i = 0 To 2
    If GetKeyState(Tasten(i)) = 0 Then
       shpKeys(i).FillColor = Aus
    Else
       shpKeys(i).FillColor = vbGreen
    End If
  Next
End Sub
 
Weitere Links zum Thema
Alt + Tab deaktivieren/aktivieren
Tastatur-Einstellungen auslesen und setzen
Tastencodes der Windows-Tasten

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
VB-Version
VBA 5
VBA 6
VB 4/16
VB 4/32
VB 5
VB 6


Download  (4 kB) Downloads bisher: [ 2307 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Donnerstag, 13. Januar 2011