SendKeys auf falsches Fenster

met

Erfahrenes Mitglied
Hallo,
wrum verliert meine Shell in folgendem Programm immer den Focus?
Die Anweisung Sendkeys wird auf einem anderen Fenster ausgeführt.

Hat jemand ne Ahnung?

Code:
Option Explicit
Const PWD_DATEI = "RunAS.pwd"
Declare Sub Sleep Lib "kernel32" (ByVal _
        dwMilliSeconds As Long)

Sub Main()
    Dim PW As String
    Dim SH As Long
    If Dir(PWD_DATEI) = "" And Left(LCase(Command), 3) <> "-p:" Then
        MsgBox "Passwort noch nicht festgelegt!" & vbCrLf & vbCrLf & _
                "RunAs -p: passwort  -> Neues Passwort setzen" & vbCrLf & _
                "RunAs -r: Programm  -> Programm starten" & vbCrLf & vbCrLf & _
                "(c) Gerd Metzger 2004", , "Fehler"
        Exit Sub
    End If
    Select Case Left(LCase(Command), 3)
        Case "-p:"
            WritePWD Mid(Command, 4)
        Case "-r:"
            PW = ReadPWD
            SH = Shell("runas /u:EIBE2000.PC\met " & Mid(Command, 4), vbNormalFocus)
            Sleep 1000
            SendKeys PW & "{ENTER}"
        Case Else
            MsgBox "Falsche Angabe von Argumenten:" & vbCrLf & vbCrLf & _
                    "RunAs -p: passwort  -> Neues Passwort setzen" & vbCrLf & _
                    "RunAs -r: Programm  -> Programm starten" & vbCrLf & vbCrLf & _
                    "(c) Gerd Metzger 2004", , "Fehler"
        Exit Sub
    End Select
End Sub

Sub WritePWD(PWD As String)
'... Möchte ich nicht unbedingt zeigen
End Sub

Function ReadPWD() As String
'... Möchte ich nicht unbedingt zeigen
End Function
 
Also dieses Programm sendet mittels Sendkey() Tastenbefehle an ein anderes Programm, oder wie? Und nach dem Sendkey verliert dieses Programm hier den Focus, oder wie?
Also wenn ja, dann ist das doch logisch: Durch das Senden von Tastenbefehlen wird dem anderen Programm/dem Windows vorgegaukelt, dass der User ein anderes Programm angeklickt hat und auf die Tastatur drückt.
Mit anderen Worten: dein Programm MUSS doch zwangsläufig den Focus verlieren, sonst würdest du die Tastenbefehle doch an dein eigenes Programm schicken!
Oder?
 
Mit
Code:
SH = Shell("runas /u:MeinComputername\MeinUsername regedit", vbNormalFocus)
wird ein Programm, in diesem Fall regedit als ein Anderer Benutzer gestartet.
Es erscheint ein cmd-Fenster mit der Aufforderung zur Passworteingabe. In dieses Fenster will ich mit SendKeys das Passwort und ein ENTER schicken.

Wie mache ich das?
 
Zurück