mein allererstes Prog in AutoIT

  • So, jetzt mal einen ausm Nähkästchen ... ^^ :tier:

    Ich weiss nicht was zuerst da war, mein Wissen um die Existenz von AutoIT oder die Idee für das folgende Programm und die Suche nach einer Skriptsprache, aber jedenfalls ist folgendes Programm so ziemlich das erste, was ich in AutoIT gemacht hab. Es stammt so wie es da steht etwa vom Frühjahr 2005 als es noch keine GUI in AutoIT gab, ich glaube es war auch noch Version 2.x aktuell damals. Ich musste für mein Praktikum bei einer kleinen IT-Firma ein Programm haben, dass beim Kunden ein paar Dateien erneuert hat, wenn die denn vorhanden waren (oder so ähnlich). Dazu musste wohl die Festplatte durchsucht werden.

    Heute würde ich doch so einiges anders und vllt einfacher machen, aber seht selbst:

    Spoiler anzeigen
    [autoit]

    If MsgBox(36, "ZMD Updater von WirCom","Wollen Sie, dass der Assistent jetzt Ihre ZMD-Dateien updatet ? " & @CRLF & @CRLF &"Sie können den Vorgang jederzeit mit Esc abbrechen.") = 7 Then exit

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("{Esc}", "Abbrechen") ; Führt bei Esc die Abfrage durch, ob das Programm abgebrochen werden soll

    [/autoit] [autoit][/autoit] [autoit]

    $dir = @WorkingDir ; speichert den aktuellen Ordner, aus dem das Script gestartet wird, in einer Variablen $dir

    Global $Searcharray[1000000] ; Das Array kann 1000000 Ordner enthalten, die durchsucht werden müssen
    Global $schreiben = 1 ; Sagt der Suche, an welcher Stelle im Array der nächste Eintrag erfolgen kann (nennt also die nächste freie Stelle im Array)
    Global $Update = 0 ; Über diese Variable wird festgestellt, ob überhaupt eine Datei zum ändern gefunden wurde, wird bei der Info-Box am Ende benötigt
    Global $i = 0 ; Mit Hilfe dieser Variable geht die Suchfunktion Ordner für Ordner bzw. Speicherstelle für Speicherstelle des Arrays durch
    Global $drive

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If DriveStatus("C:\") = "READY" Then Suche("C:\") ; Wenn die Festplatte C: bereit ist, wird sie durchsucht

    [/autoit] [autoit][/autoit] [autoit]

    If DriveStatus("D:\") = "READY" Then Suche("D:\") ; Wenn die Festplatte D: bereit ist, wird sie durchsucht

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Suche($drive)

    [/autoit] [autoit][/autoit] [autoit]

    $Searcharray = 0 ; Löscht das Array vor der neuen Suche
    Global $Searcharray[1000000] ; Definiert das Array neu, damit wieder 1000000 Plätze zur Verfügung stehen
    $schreiben = 1 ; Variable für die neue Suche auf Anfangswert zurücksetzen
    $i = 0 ; Variable für die neue Suche auf Anfangswert zurücksetzen
    $size = 0
    $prozent = 0

    FileChangeDir($drive) ; wechselt in das Hauptverzeichniss der Festplatte (hier beginnt die Suche)

    $space = (DriveSpaceTotal($drive) - DriveSpaceFree($drive)) * 1048576 ; berechnet den beschriebenen Teil der Festplatte und wandelt das Ergebnis in Bytes

    [/autoit] [autoit][/autoit] [autoit]

    ProgressOn("Fortschritt - ZMD Updater von WirCom", _
    "Update läuft auf Laufwerk: " & $drive, "0 Prozent fertiggestellt") ; zeigt die Fortschrittsanzeige
    WinActivate ( "Fortschritt - ZMD Updater von WirCom" )

    $Searcharray[0] = @WorkingDir ; setzt den ersten Platz im Array auf den aktuellen Ordner (also das Hauptverzeichnis der aktuellen Festplatte)

    [/autoit] [autoit][/autoit] [autoit]

    While $Searcharray[$i] ; Startet die Suchschleife, die alle Dateien und Ordner im Ordner durchsucht, der an der Stelle $i im Searcharray steht, beim ersten mal wäre das das aktuelle Hauptverzeichnis der Festplatte
    FileChangeDir ( $Searcharray[$i] ) ; wechselt in das Verzeichniss, das an der Stelle $i im Array steht, denn darin wird gesucht
    $search = FileFindFirstFile("*") ; initialisiert die Suche bzw. den Handle $search

    If $search = -1 Then
    MsgBox(0, "Error", "Keine Datei auf dem Laufwerk vorhanden !!!")
    ExitLoop ; verlässt die aktuelle Suche, falls nicht eine Datei im Hauptverzeichniss ist
    EndIf

    While 1 ; Startet die "unendliche" Suche im aktuellen Ordner mit dem vorher erstellten Handle "$search"
    $file = FileFindNextFile($search) ; $file enthält immer die nächste gefundene Datei/Ordner
    If @error Then ExitLoop ; wenn er keine nächste findet, wird die SChleife verlassen

    $size = $size + FileGetSize($file) ; Größe der insgesamt durchsuchten Dateien wird um die Größe der gerade gefundenen Datei ergänzt
    $prozent = Round(($size / ($space / 100)),0) ; berechnet den Prozentanteil der schon durchsuchten Dateien am Füllstand der Festplatte und rundet den Wert auf 0 Dezimalstellen
    If $prozent > 100 Then $prozent = 100
    ProgressSet($prozent , $prozent & " Prozent fertiggestellt") ; aktualisiert die Fotrschrittsanzeige


    If StringInStr(FileGetAttrib( $file ), "D", 0,) <> 0 Then ; Wenn der nächste gefundene Gegenstand ein Ordner ist dann...
    If $file <> "." AND $file <> ".." Then ; Da die Suche bei AutoIT ab und an "." und ".." zurückliefert, müssen diese ausgeschlossen werden
    If @WorkingDir <> $drive Then ; Wenn es sich beim aktuellen Ordner um C:\ handelt, so ist der Backslash schon da ( "C:\"), ...
    $Searcharray[$schreiben] = @WorkingDir & "\" & $file ; -aus dem aktuellen Ordner wird ein Ordner mit seinem Pfad in Excel gespeichert
    $schreiben = $schreiben + 1 ; $speichern wird um 1 erhöht, damit die nächste Angabe für den zu durchsuchenden Ordner in die nächste (also freie Speicherstelle des Arrays) gespeichert wird
    Else ; Ansonsten muss er zwischen "Ordner" und "Ordner" eingefügt werden.
    $Searcharray[$schreiben] = @WorkingDir & $file ; -aus dem aktuellen Ordner wird ein Ordner mit seinem Pfad in Excel gespeichert
    $schreiben = $schreiben + 1 ; Ansonsten muss er zwischen "Ordner" und "Ordner" eingefügt werden.
    EndIf
    EndIF
    Else ; Wenn der gefundene Gegenstand kein Ordner (also eine Datei ist) ...
    If $file = "ZMD.EXE" AND $dir <> @WorkingDir Then ; Nur wenn es sich um die gesuchte Datei handelt, dann ...
    If ProcessExists("ZMD.EXE") Then ; Wenn die ZMD.EXE noch läuft, wird sie beendet
    ;msgbox(4096,"Info","Bitte beenden Sie die ZMD.EXE, oder sie _
    ; wird in 20 Seunden geschlossen",20)
    ProgressOn("ZMD.exe wird in 20 Sekunden automatisch beendet !", "Bitte " _
    "beenden Sie ZMD. " , "20 Sekunden")
    For $sekunden = 0 To 20
    ProgressSet((5 * (20 - $sekunden)), (20 - $sekunden) & " Sekunden")
    sleep(1000)
    Next
    ProgressOn("Fortschritt - ZMD Updater von WirCom", _
    "Update läuft auf Laufwerk: " & $drive, "0 Prozent fertiggestellt")
    ProcessClose ( "ZMD.EXE" )
    EndIf
    FileCopy ( $dir &"\ZMD.EXE", @WorkingDir&"\" ,1 ) ; Die gefundene Datei wird von der neuen überschrieben
    FileCopy ($dir &"\Beitrag.def", @WorkingDir&"\" ,1 ) ; Diese Datei kommt in den selben Ordner
    FileCopy ( $dir &"\export.def", @WorkingDir&"\" ,1 ) ; Diese Datei kommt in den selben Ordner
    $Update = $Update + 3 ; Da 3 Dateien ersetzt/kopiert wurden, wird der Zähler um 3 erhöht
    EndIf
    EndIf
    WEnd

    FileClose($search) ; Das Suchhandle wird geschlossen
    $i = $i +1 ; Die Suche nach der Datei und nach weiteren zu durchsuchenden Ordnern ist beendet, damit die Suche beim nächsten im Array vorkommenden Ordner fortgeführt wird, wird der Zähler $i um 1 erhöht.

    [/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    ProgressSet(100 , 100 & " Prozent fertiggestellt") ; ProgressBar auf 100% stellen, da fertig
    sleep(1000) ; 1 Sekunde warten, damit der Benutzer die 100% sehen kann ;)
    ProgressOff() ; Die Fortschrittsanzeige wird ausgestellt, da die Suche zu Ende ist

    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]


    If $Update = 0 Then
    MsgBox(64,"ZMD Updater von WirCom","Das Update Ihrer ZMD-Dateien wurde abgeschlossen, es wurden aber keine Dateien upgedated.")
    Else
    MsgBox(64,"ZMD Updater von WirCom","Das Update Ihrer ZMD-Dateien wurde erfolgreich abgeschlossen, es wurden " &$Update & " Dateien geändert.")
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Abbrechen()

    [/autoit] [autoit][/autoit] [autoit]

    ProgressOff()
    If MsgBox(4, "ZMD Updater von WirCom","Wollen Sie den Assistenten jetzt abbrechen ? Es wurden erst " & $Update & " Dateien upgedated.") = 6 Then exit
    ProgressOn("Fortschritt - ZMD Updater von WirCom", _
    "Update läuft auf Laufwerk: " & $drive, "0 Prozent fertiggestellt")

    EndFunc

    [/autoit]
  • hm, da hab ich jetzt eigentlich nie großartig drauf geachtet ^^

    verzeihung :hammer: :hm: :irre: