Um einmal zu demonstrieren, welche Möglichkeiten AutoIt bietet, führe ich den Thread mit einem "kleinen" Script weiter.
Sinn und Zweck dieses Scriptes ist es, mit einem Umweg (zur Demonstration der Manipulationsmöglichkeiten von AutoIt) über die Ausgabe in ein Notepad-Fenster
a) alle laufenden Prozesse und Prozess-ID's aufzulisten, und
b) laufende Phoner-Instanzen und deren PID's separat aufzulisten.
Ist Phoner nicht gestartet, wir der Anwender gefragt, ob Phoner gestartet werden soll.
Erläuterungen und Kommentare zu diesem Script finden sich am Ende. Das kompilierte AutoIT-Executable ist diesem Tutorial als Dateianhang beigefügt.
Das Script:
$ProcessNameArray = ProcessList()
$IfPhonerExists = ProcessList("phoner.exe")
$PhonerProcessExists = "0"
Dim $ExitMessage
Run("notepad.exe")
WinWaitActive("Unbenannt - Editor")
Send("Liste der aktiven Prozesse: {ENTER}{ENTER}")
For $ProcessCounter = 1 to $ProcessNameArray[0][0]
PhonerProcessProof()
next
If $PhonerProcessExists = "1" Then
OnPhonerExistsProof()
Else
Send("{ENTER}")
Send("--------------------------------------------------{ENTER}")
Send("Kein laufender Phoner-Prozess identifiziert. {ENTER}")
Send("--------------------------------------------------{ENTER}")
StartPhonerOrNot()
EndIf
; ------------------------------------------------------------------------
; Ab hier werden die Funktionen definiert, die vorstehend aufgrufen werden
; ------------------------------------------------------------------------
Func PhonerProcessProof()
If $ProcessNameArray[$ProcessCounter][0] = "phoner.exe" Then
$PhonerProcessExists = "1"
Else
Send("PID: " & $ProcessNameArray[$ProcessCounter][1] & " " & $ProcessNameArray[$ProcessCounter][0] & "{ENTER}")
EndIf
EndFunc
Func OnPhonerExistsProof()
Send("{ENTER}")
Send("--------------------------------------------------{ENTER}")
Send("Identifizierte Phoner-Prozesse:{ENTER}")
Send("--------------------------------------------------{ENTER}")
For $ProcessCounter = 1 to $IfPhonerExists[0][0]
Send("PID: " & $IfPhonerExists[$ProcessCounter][1] & " " & $IfPhonerExists[$ProcessCounter][0] & "{ENTER}")
next
EndFunc
Func StartPhonerOrNot()
$ask = MsgBox(32+4,"Phoner wurde nicht gestartet!","Soll eine Instanz von Phoner gestartet werden?")
If $ask = 6 Then
RunOpenDialog()
ElseIf $ask = 7 Then
$ExitMessage = "Phoner sollte nicht gestartet werden."
GotoExit()
EndIf
Endfunc
Func RunOpenDialog()
$AskForFile = "Bitte das Programmverzeichnis von Phoner auswählen!"
$OpenFile = FileOpenDialog($AskForFile, "C:\Programme\", "Ausführbare Dateien (*.exe)", 1 + 2, "phoner.exe")
If @error Then
$ExitMessage = "Der Vorgang wurde abgebrochen."
GotoExit()
Else
Run($OpenFile)
$ExitMessage = "Phoner wurde gestartet."
WinWaitActive("Phoner")
GotoExit()
EndIf
EndFunc
Func GotoExit()
$exit = MsgBox(0,"Abbruch",$ExitMessage & @CRLF & "Das Beispielprogramm wird beendet.")
EndFunc
Erläuterungen: In den Zeilen 1 - 5 werden Variablen ($[Name]) für die spätere Verwendung definiert. Die Dim-Anweisung in Zeile 5 ist eine Besonderheit, da somit die entsprechende Variable deklariert, jedoch vorerst noch keinen Wert zugewiesen erhält.
In den Zeilen 7-9 soll
a) Das Programm "notepad.exe" gestartet werden,
b) gewartet werden, bis das notepad-Fenster aktiv ist,
c) und dem Notepad-Fenster per "Send" die erste Textzeile geschickt werden.
Hierin zeigt sich eine der AutoIt-Stärken: Die Manipulation aktiver Programm-Fenster. Doch hierzu soll mehr im Laufe des weiteren Tutorials geschrieben werden.
In den Zeilen 11-13 wird ein Counter gesetzt - für jeden gezählten, laufenden Prozess soll die Funktion PhonerProcessProof() aufgerufen werden, in der weitere Anweisungen aufgeführt sind. Sämtliche Funktionen sind am Ende des Scriptes definiert.
Die Zeile 15-23 werten das Ergebnis (Inhalt der Variable $PhonerProcessExists) aus - ist ein Phoner-Prozess also aktiv (="1"), dann wird die Funktion "OnPhonerExistsProof()" ausgeführt, die eine Überprüfung aller laufenden "phoner.exe"-Prozesse vornimmt, und diese am Ende der Liste (siehe Notepad-Fenster) ausgibt. Danach wird das Script beendet.
Ist kein Phoner-Prozess aktiv, wird nach einer entsprechenden Ausgabe im Notepad-Fenster die Funktion "StartPhonerOrNot()" ausgeführt.
In den Zeilen 29-73 werden die Funktionen definiert, die im Abschnitt vorher mit "Funktionsname()" an den entsprechenden Stellen ausgeführt werden sollen.
Grundsätzlich enthält dieses Script drei Typen von Anweisungen:
$Variablen - enthalten Werte (numerisch oder alphanumerisch). Variablen können auch Funktionen und deren Parameter enthalten, die beim nächsten Aufruf der Variable gestartet werden.
Funktionen() - enthalten Anweisungen, die ausgeführt werden, wenn die Funktion im Script aufgerufen wird. Funktionen können vom Benutzer selber (z. B. StartPhonerOrNot(), RunOpenDialog(), Definiert in einem Func - EndFunc-Block) definiert werden, oder es werden Funktionen, die im Umfang der Programmiersprache enthalten sind, angesprochen (z. B. ProcessList(), MsgBox(...), etc.).
Bedingungen - Schleifen, Wenn-Dann-Sonst-Konstrukte und ähnliches.
Die Namen für Variablen und Funktionen sollten selbsterklärend sein. Rückfragen hierzu könnt Ihr jedoch gerne in diesem Thread stellen. Bitte zitiert dann die entsprechende Stelle des Codes.
Da die Prüfung, ob ein Phoner-Prozess existiert oder nicht, im weiteren wesentlich für eine nette Suite "um Heikos Programm herum" ist, leite ich das AutoIt-Phoner-Extension-Tutorial damit "feierlich" ein, und bin gespannt auf Eure Ideen.
Viele Grüße vom Kai