VBA Postmessage ignoriert Shift
27.01.2026 09:56:09
W.Stecher
ich möchte beim RDP-Verbindungsaufbau das Passwort in die Anmeldemaske "Windows-Sicherheit" per VPA eintragen.
Die Ermittlung des Fensterhandles klappt wunderbar und Return zur Bestätigung der Eingabe funktioniert auch.
Ein Problem habe ich jedoch mit Großbuchstaben und Sonderzeichen.
Zu Testzwecken und um diesen Beitrag möglichst klein zu halten, wollte ich zunächst nur ein "T" eintragen, was jedoch eingetragen wird ist "tt"
Also weder ein großes T und das kleine t sogar zweimal. Das ist mein Code:
Option Explicit
Private Declare PtrSafe Function PostMessage Lib "user32.dll" Alias "PostMessageA" ( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Private Declare PtrSafe Function SetForegroundWindow Lib "user32" ( _
ByVal hwnd As Long) As Long
Private Declare PtrSafe Function SetActiveWindow Lib "user32.dll" ( _
ByVal hwnd As Long) As Long
Private Declare PtrSafe Sub Sleep Lib "kernel32" ( _
ByVal dwMilliseconds As LongPtr)
Public Function PostPassword()
Const WM_KEYDOWN = &H100
Const WM_KEYUP = &H101
Const VK_SHIFT = &H10
Dim hwnd As Long
Do Until hwnd > 0
hwnd = GetWindowHandle("Windows-Sicherheit")
Sleep 1000
Loop
Call SetForegroundWindow(hwnd)
Call SetActiveWindow(hwnd)
Sleep 500
'Shift Taste drücken
Call PostMessage(hwnd, WM_KEYDOWN, VK_SHIFT, &H1)
'T drücken
Call PostMessage(hwnd, WM_KEYDOWN, &H54, &H1)
'T loslassen
Call PostMessage(hwnd, WM_KEYUP, &H54, &H1)
'Shift Taste loslassen
Call PostMessage(hwnd, WM_KEYUP, VK_SHIFT, &H1)
End Function
Und das ist das Ergebnis:
Hat jemand eine Idee, wo mein Denkfehler liegt?
Danke vorab.
Anzeige