![]() |
Tipp 0438
|
Tastatureingaben systemweit abfragen
|
 |
|
Autor/Einsender: Datum: |
|
Frank Grimm 17.02.2005 |
|
Entwicklungsumgebung: |
|
VB 6 |
|
|
Innerhalb von Formularen kann man mittels des KeyPress-Ereignisses und der
KeyUp-/KeyDown-Ereignisse komfortabel auf Tastatureingaben des Benutzers
reagieren. Wenn ein Fenster allerdings unsichtbar ist oder lediglich den Fokus verloren hat,
werden diese Ereignisse nicht mehr ausgelöst. Um trotzdem auf Tastatureingaben reagieren
zu können, zeigt dieser Tipp wie man mit einem Timer und der API-Funktion
GetAsyncKeystate den Status einer Taste überprüfen kann. Durch die Übergabe
des KeyCodes aus der KeyCodeConstants-Aufzählung lässt sich mit Hilfe dieser API-Funktion
ermitteln, ob die Taste momentan gedrückt ist, seit der letzten Überprüfung gedrückt wurde
oder nicht gedrückt wurde.
|
|
|
Option Explicit
Private Declare Function GetAsyncKeyState Lib "user32" ( _
ByVal vKey As Long) As Integer
Private Declare Sub CopyMemory Lib "kernel32" Alias _
"RtlMoveMemory" (lpDest As Any, lpSource As Any, _
ByVal cBytes As Long)
Private Sub Form_Load()
Dim i As Long
For i = 0 To (chkFKey.Count - 1)
chkFKey(i).Caption = chkFKey(i).Caption & CStr(i + 1)
Next i
End Sub
Private Sub tmrCheckKeys_Timer()
Dim i As Long
Dim nRetVal As Long
For i = KeyCodeConstants.vbKeyF1 To KeyCodeConstants.vbKeyF12
nRetVal = GetAsyncKeyState(i)
If (HiWord(nRetVal) <> 0) Or (LoWord(nRetVal) <> 0) Then
chkFKey(i - 112).Value = 1
Else
chkFKey(i - 112).Value = 0
End If
Next i
End Sub
Private Function LoWord(ByVal dwValue As Long) As Integer
Call CopyMemory(LoWord, dwValue, 2&)
End Function
Private Function HiWord(ByVal dwValue As Long) As Integer
Call CopyMemory(HiWord, ByVal VarPtr(dwValue) + 2, 2&)
End Function
|
|
|
|
|
Windows-Version |
95 |
 |
|
98 |
 |
|
ME |
 |
|
NT |
 |
|
2000 |
 |
|
XP |
 |
|
Vista |
 |
|
Win
7 |
 |
|
|
VB-Version |
VBA 5 |
 |
|
VBA 6 |
 |
|
VB 4/16 |
 |
|
VB 4/32 |
 |
|
VB 5 |
 |
|
VB 6 |
 |
|
|
|
Download (3,6
kB)
|
Downloads bisher: [ 2007 ]
|
|
|