vbscript - nur profis bitte (2.0)

...komplette Frage anzeigen

2 Antworten

Dieses Schnipsel hier dienst dazu, einen NEUEN Prozeß zu erzeugen und DANN auf dessen Ende zu warten.

Was Du laut Deiner Beschreibung WILLST, ist aber, einen EXTERN erzeugten Prozeß feststellen und auf dessen Ende warten.

Sowas nennt man üblicherweise "attach"en. Das könnte eventuell als Stichwort weiterhelfen.

Um die Prozesse in der Umgebung (auf die das monitorende Programm Zugriff hat) zu erkennen, kannst Du aus der Klasse "Process" eine der Funktionen getProcess(es)By(Name|Id) benutzen. Auf jeden damit ermittelten Prozeß kannst Du dann mittels "WaitForExit" warten. Weiteres wirst Du experimentieren müssen.

Antwort bewerten Vielen Dank für Deine Bewertung
MaxChri 24.03.2013, 17:21

ok danke war zwar nicht das was ich woltle (hab ich gerad gefunden und zum teil umgescriptet), aber waitforexit ist auch für was anderes gut. DANKE :PP

0

Ich bin zwar kein Profi, aber die Funktion SchellandWait möchte als Parameter ProcessPath... Und das sollte dann eigentlich deine Frage lösen.

Antwort bewerten Vielen Dank für Deine Bewertung
MaxChri 24.03.2013, 14:44

kannst du mir ein beispiel mit einem windows programm machen?

0
edbca 24.03.2013, 17:10
@MaxChri

Also ich programmiere eigentlich nichts in VB bzw. VBScript... D.h. folgende Erklärung könnte in VBScript nicht stimmen...

Du musst die Funktion eigentlich nur aufrufen:

ShellandWait("Programmpfad/tollesprog.exe")

Der Prozess wird gestartet (tollesprog.exe) und dann wartet die Funktion, bis es einen Exit Code bekommt (also wenn du dein tollesprog.exe schließt), dann wird dein angelegter Prozess freigegeben.

Da der Prozess von deinem Script gestartet wird, läuft er also zwangsläufig zur Laufzeit deines Scripts (wenn nicht, gibst du ja mit catch einen Fehler aus). Willst du auf einen Prozess warten (ohne ihn aufzurufen), so musst du einen anderen Ansatz wählen.

Du musst die laufenden Prozesse abfragen und unter denen gucken, ob sich dein Prozess befindet. Das schaffst du (zumindest im Visual Studio) mit Process.GetProcesses()


(Code in C#)

while(true)
{
  Process[] prozesse = Process.GetProcesses();

  foreach(Process p in prozesse)
  {
    //Prozessname stimmt mit Programmname überein?
    if(p.ProcessName.ToString() == "dein Programmname")
      break; //Bricht Schleife ab
  }

  //Weitere Abbruchbedingungen, DoEvents (damit Script reagiert)
}

//Prozess gefunden - Abarbeitung Script

Wäre natürlich nur eine Variante, die mir eben eingefallen ist... Wahrscheinlich kann man auch gleich direkt fragen, ob genau der Prozess existiert, statt alle in der Liste abzufragen

Ein Windowsprogramm kann ich dir leider momentan nicht erstellen. Wäre aber auch nur der Code oben, eingefügt in einer ButtonClick-Funktion :D

0

Was möchtest Du wissen?