Prozess starten

ibafluss

Erfahrenes Mitglied
Hey Leute!

Ich habe folgendes Problem: Ich muss ein Programm schreiben, das unter anderem ein anderes Programm startet und diesem dann Tastatureingaben sendet.
Also das sieht ungefähr so aus: Das Programm wird mit Shell() gestartet, dann erscheint zuerst ein kleines Login-Fenster. Über SendKeys() sende ich dem Fenster die Logindaten und dann schließt dieses Fenster und das eigentliche Programm öffnet sich. Auch diesem Programm muss ich wieder Tastatureingaben senden.

Das Problem dabei ist: Bis sich das eigentliche Programm öffnet, dauert es immer ein paar Sekunden. Ich habe jetzt deshalb in meinem Programm ein einfaches Sleep() eingebaut, nur das funktioniert eben ein paar Mal und ein paar Mal nicht (Wenn ich die Tastatureingaben zu früh sende, werden sie nicht angenommen). Deshalb habe ich es mit folgender Schleife probiert:

Visual Basic:
    While FindWindow(vbNullString, "Fenstertitel") = 0
        Sleep (1000)
    Wend

Ich habe gedacht das funktioniert, das tut es aber nicht. Anscheinend macht Windows mit dem anderen Prozess nicht weiter sondern durchläuft immer wieder diese Schleife.

Gibt es eine Möglichkeit Windows irgendwie zu sagen, es soll mit dem anderen Prozess weitermachen? Oder hat jemand eine andere Lösung wie man das möglichst stabil programmiert?

Lg
 
Du kannst bei SendKeys noch den Parameter Wait = True/False angeben. Dadurch wird geprüft ob der Befehl korrekt verarbeitet wurde oder nicht. Eine recht ausführliche Beschreibung findest du hier.

Eventuell kannst du damit ja erreichen was du wilst!
 
Vielen Dank für die Antwort!

Das Problem ist, wenn das kleine Login-Fenster schließt, muss ich dem großen Fenster, das sich dann öffnet, den Fokus geben. Das wollte ich mit AppActivate machen. Nur wenn mein vba-Skript zu schnell weitergeht und, bevor das große Fenster geöffnet ist, das AppActivate ausführt, bekomme ich einen Fehler. Deshalb wollte ich diese Schleife einbauen. Nur leider funktionierte die aus dem oben genannten Grund nicht.

Lg

Also die Hauptfrage wäre: Kann ich Windows sagen: Mach mit einem anderen Prozess weiter?

Lg

Ich habe die Lösung gefunden. Falls jemand mal mit diesem Problem konfrontiert wird: DoEvents sollte Abhilfe schaffen. Ich habe das Sleep() in der Schleife mit DoEvents ersetzt und es funktioniert!

Lg
 

Neue Beiträge

Zurück