Peter Schleif
2008-02-23 16:04:58 UTC
Hallo.
Ich habe hier ein Verhalten in VBA, dass ich nicht verstehe und wollte
mal fragen, ob mir das jemand erklären kann:
Drei Funktionen liefern den Status der Steuerungstasten. Jeweils eine
für Shift, Ctrl und Alt.
0 = keine gedrückt
1 = nur links
2 = nur rechts
3 = beide
Zum Überprüfen gibt es die Prozedur status(), welche die drei Status
im Debug-Fenster ausgibt. Damit genug Zeit ist, die Taste(n) zu
drücken, gibt es eine Verzögerung von zwei Sekunden mit
Application.Wait. Aber das funktioniert zumindest für Links-Alt
_nicht_ korrekt.
Shift Ctrl Alt
Soll: 0 0 1
Ist: 0 0 0
Wenn ich die Prozedur status() aber von einer anderen Prozedur
(status2) mit Application.OnTime (auch 2 sec Verzögerung) aufrufe,
dann klappt es.
Woran kann das wohl liegen?
Hier das komplette Modul. Vielen Dank im voraus.
Peter
----------------------- Code --------------------------------
Option Explicit
Private Declare Function GetKeyState Lib "user32" ( _
ByVal nVirtKey As Long) As Integer
Sub status()
Application.Wait Now + 2 / 86400
Debug.Print StatusShift, StatusCtrl, StatusAlt
End Sub
Sub status2()
Application.OnTime Now + 2 / 86400, "status"
End Sub
Public Function StatusShift() As Integer
StatusShift = IIf(GetKeyState(&HA0) And &HFF80, 1, 0) _
+ IIf(GetKeyState(&HA1) And &HFF80, 2, 0)
End Function
Public Function StatusCtrl() As Integer
StatusCtrl = IIf(GetKeyState(&HA2) And &HFF80, 1, 0) + _
IIf(GetKeyState(&HA3) And &HFF80, 2, 0)
End Function
Public Function StatusAlt() As Integer
StatusAlt = IIf(GetKeyState(&HA4) And &HFF80, 1, 0) + _
IIf(GetKeyState(&HA5) And &HFF80, 2, 0)
End Function
-------------------------------------------------------------
Ich habe hier ein Verhalten in VBA, dass ich nicht verstehe und wollte
mal fragen, ob mir das jemand erklären kann:
Drei Funktionen liefern den Status der Steuerungstasten. Jeweils eine
für Shift, Ctrl und Alt.
0 = keine gedrückt
1 = nur links
2 = nur rechts
3 = beide
Zum Überprüfen gibt es die Prozedur status(), welche die drei Status
im Debug-Fenster ausgibt. Damit genug Zeit ist, die Taste(n) zu
drücken, gibt es eine Verzögerung von zwei Sekunden mit
Application.Wait. Aber das funktioniert zumindest für Links-Alt
_nicht_ korrekt.
Shift Ctrl Alt
Soll: 0 0 1
Ist: 0 0 0
Wenn ich die Prozedur status() aber von einer anderen Prozedur
(status2) mit Application.OnTime (auch 2 sec Verzögerung) aufrufe,
dann klappt es.
Woran kann das wohl liegen?
Hier das komplette Modul. Vielen Dank im voraus.
Peter
----------------------- Code --------------------------------
Option Explicit
Private Declare Function GetKeyState Lib "user32" ( _
ByVal nVirtKey As Long) As Integer
Sub status()
Application.Wait Now + 2 / 86400
Debug.Print StatusShift, StatusCtrl, StatusAlt
End Sub
Sub status2()
Application.OnTime Now + 2 / 86400, "status"
End Sub
Public Function StatusShift() As Integer
StatusShift = IIf(GetKeyState(&HA0) And &HFF80, 1, 0) _
+ IIf(GetKeyState(&HA1) And &HFF80, 2, 0)
End Function
Public Function StatusCtrl() As Integer
StatusCtrl = IIf(GetKeyState(&HA2) And &HFF80, 1, 0) + _
IIf(GetKeyState(&HA3) And &HFF80, 2, 0)
End Function
Public Function StatusAlt() As Integer
StatusAlt = IIf(GetKeyState(&HA4) And &HFF80, 1, 0) + _
IIf(GetKeyState(&HA5) And &HFF80, 2, 0)
End Function
-------------------------------------------------------------