Problem gelöst
Hallo Peter,
was haellst du davon deinem Formular oder Control vorab ein
SendKeys zu schicken, dann erhaellst du im KeyDown event den
Shiftstatus.
das finde ich nicht so gut, dann habe ich ja ein Zeichen, das ich erst wieder entfernen muß. Die Variante den Status über die API auszulesen finde ich besser, sauberer. Ich hatte die richtige Stelle nur selbst nicht gefunden. Mit der Hilfe habe ich nun eine Prozedur, die ‚Capslock‘ ausschaltet, falls es eingeschaltet ist.
Nachdem ich wußte, wonach ich suchen muß, war’s dann nicht mehr schwer. Das sieht etwas unübersichtlich aus, funktioniert dafür aber mit jedem Windows.
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String \* 128 ' Maintenance string for PSS usage
End Type
' API declarations:
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 GetKeyboardState Lib "user32" \_
(pbKeyState As Byte) As Long
Private Declare Function SetKeyboardState Lib "user32" \_
(lppbKeyState As Byte) As Long
' Constant declarations:
Const VK\_CAPITAL = &H14
Const KEYEVENTF\_EXTENDEDKEY = &H1
Const KEYEVENTF\_KEYUP = &H2
Const VER\_PLATFORM\_WIN32\_NT = 2
Const VER\_PLATFORM\_WIN32\_WINDOWS = 1
Private Sub Command1\_Click()
Dim o As OSVERSIONINFO
Dim CapsLockState As Boolean
o.dwOSVersionInfoSize = Len(o)
GetVersionEx o
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)
' CapsLock handling:
CapsLockState = keys(VK\_CAPITAL)
If CapsLockState = True Then 'Turn capslock on
If o.dwPlatformId = VER\_PLATFORM\_WIN32\_WINDOWS Then '=== Win95/98
keys(VK\_CAPITAL) = 0
SetKeyboardState keys(0)
ElseIf o.dwPlatformId = VER\_PLATFORM\_WIN32\_NT Then '=== WinNT
'Simulate Key Press
keybd\_event VK\_CAPITAL, &H45, KEYEVENTF\_EXTENDEDKEY Or 0, 0
'Simulate Key Release
keybd\_event VK\_CAPITAL, &H45, KEYEVENTF\_EXTENDEDKEY \_
Or KEYEVENTF\_KEYUP, 0
End If
End If
End Sub
Gruß, Rainer