AutoInstaller zerbircht mir den Kopf

  • Hey Community.
    Ich bin seit 3 Wochen in der Ausbildung zum Fachinformatiker.
    Hier beschäftige ich mich nebenbei mit der Programmierung von AutoIT.


    Ich will einen AutoInstaller schreiben. Inzwischen bin ich soweit, dass die .exe-Datein starten. Nun will ich aber, dass nur meine in der GUI angewählten Checkboxen abgefragt und installiert werden. Ich benutze Switch und habe versucht dazwischen noch eine If abfrage laufen zu lassen. Habe ich diese aber in der Switch drin werden die Programme nicht mehr abgefragt.
    Hilfe :rofl: ?


    Um es nebenbei zu sagen, ich habe ca. 20 stunden mit Forendurchsuchen verbracht und bin und bleibe vorerst noch ein Noob auf dem Gebiet :D Ich lerne langsam ;) !


    Ich hoffe, dass die beschreibung meines Problems reicht und ich nicht zu diesem Thema den 100en Beitrag eröffne.


    Danke schonmal. :rock:


    Hier der Quellcode:
    Func Button_Install()
    $msg = GUIGetMsg()
    Switch $msg
    Case $msg
    RunWait("FirefoxVersion23.0.exe", @WindowsDir, @SW_HIDE)
    MsgBox(0, "Firefox", "Firefox wurde installiert")
    RunWait("ChromeStandaloneSetup_28.0b1500.95.exe")
    MsgBox(0, "Chrome", "Chrome wurde installiert")
    RunWait("Opera_15.0.1147.153_Setup.exe")
    MsgBox(0, "Opera", "Opera wurde installiert")
    EndSwitch
    EndFunc

    Einmal editiert, zuletzt von Vjordian ()

  • Erstmal wäre es sinnvoll wenn du mehr als nur diesen Code Schnippsel posten würdest, denn von Checkboxen seh ich da schonmal garnichts. Zu dem was du da gepostet hast:



    $msg = GUIGetMsg()


    Liefert dir die letzte GUI Nachricht, welche noch nicht zuvor abgefragt wurde (z.B. ein Klick auf einen Button), sofern es keine Nachricht gibt wird 0 zurückgegeben. Da du keine Schleife verwendest um die GUI Nachrichten in sehr kurzen Intevallen abzurufen ist es ziemlich wahrscheinlich, dass du hier an dieser Stelle immer eine 0 zurückbekommen wirst, außer diese Funktion wird in einer Schleife aufgerufen (der Rest des Scriptes fehlt, also keine Aussage hierzu möglich).



    $msg = GUIGetMsg()
    Switch $msg
    Case $msg


    Du scheinst den Sinn einer Switch Case Verzweigung nicht verstanden zu haben. Du machst hier folgendes:


    1. Du bekommst eine GUI Nachricht $msg (wie oben bereits angedeutet sehr wahrscheinlich nur eine 0)
    2. Der Case $msg ist immer erfüllt, völlig egal welchen Wert $msg nun hat, ist ja auch logisch, denn ein "case" einer switch case Verzweigung stellt nur eine if Bedingung von mehreren dar. Solche Verzweigungen sind Sinnvoll wenn man einen Variablen Wert ($msg) mit mehreren verschiedenen konstanten Werten Vergleichen will. So würde es als if Bedingung ausschaun:



    $msg = GUIGetMsg()
    if $msg = $msg then .... ; das ist immer true!


    Du erkennst deinen Fehler?


    Poste also bitte mal das ganze Script, dann kann man dir auch Lösungen aufzeigen die eher sinnvoll sind.

  • Hier mal den ganzen Code und ja, ich glaube Stück für Stück zu verstehen :D
    Und danke für Dein Bemühen! :love:



    Edit: der Berreich "
    #region Func Checkbox_AllClick" wurde mir geschrieben, nicht das es zu missverständnissen kommt, weil dort schon eine If-Variante exestiert.


    Und entschuldigt das Chaos im Script ;D!

    Einmal editiert, zuletzt von Vjordian ()

  • Du musst nur in der ButtonStart Funktion abfragen welche Checkboxen gesetzt sind und dann die jeweiligen Programme installieren.
    So in der Art:


  • Desweiteren kann bzw. sollte man den onEvent mode nicht mit dem msgloop mode mischen. Wenn man es schon mischt muss vor einer guigetmsg Abfrage der onEvent mode temporär abgeschaltet werden. Dein guigetmsg in der zentralen while Schleife hat da also nicht wirklich etwas verloren.

  • hat jetzt mit deinem Problem nur indirekt was zu tun, aber ich würde von der verwendung von Koda o. ä. abraten.
    die dinger produzieren viel zu viel unnötigen code, der dein programm unübersichtlicher und damit fehleranfälliger und unnötig groß macht.
    Es macht z.B. nur sehr selten sinn, die handles von Labeln zu speichern, weil man sie nur sehr selten braucht, und die variablen mit $Check_... werden in deinem code auch nicht verwendet und erhöhen nur die ram-belegung und bremsen dein skript aus.
    Und die funktionen für minimize, maximize, restore usw sind in dem fall auch unnötig.


    Ich hab mir mal erlaubt, den Teil des Codes, den du geposted hast, ganz fix zu bereinigen, is immer noch nicht perfekt, aber schon mal besser:



    und du solltest mal über die verwendung von Opt("MustDeclareVars", 1) nachdenken


    Ich hoffe, das war nicht zu viel Kritik, aber ich wollte dich auf einige Dinge hinweisen, über die ich selber auch gestolpert bin

    MFG inventor


    wenn's weitere Fragen gibt -> PN
    wenn da keine Antwort kommt, überdenk deine Frage noch mal

  • Für den Anfang ist Koda allerdings am einfachsten, auch wenn der Code dadurch nicht immer 100% optimiert ist.
    Ausserdem geht es nunmal einfacher und schneller als von Hand und ab und zu muss es halt schnell gehen ;)

    FLIP ALL DEM TABLEZ ┻━┻︵ \(°□°)/ ︵ ┻━┻


  • Das hängt nur von den eigenen Fähigkeiten ab. Ich garantiere dir, dass ich eine GUI mit diversen Elementen ohne Koda mindestens genauso schnell, aber sauberer erstelle als irgendwer mit Koda. :P


    Das Glaube ich dir sofort. Es können aber nicht alle gleich so talentiert sein wie du.
    Ich persönlich bin immer noch dankbar, dass es Koda gibt. Ich bin mir nicht mal sicher ob ich eine GUI ohne das überhaupt hinkriegen würde :whistling:

    FLIP ALL DEM TABLEZ ┻━┻︵ \(°□°)/ ︵ ┻━┻

  • Bevor Ihr euch noch hier den ultimativen Cyber-Krieg liefert danke ich Euch beiden!
    Und ich nehme jede Kritik danken an! Da kannst du ruhig noch mehr Tipps, Tricks und Ideen einbringen ;-) !
    Das ist doch Sinn und Zweck bei den "Hilfe & Unterstützung" posts ;D!


    Ich werde mal umsetzten was Ihr mir hier geschrieben habt. Bei weiteren Fragen schreibe ich einfach neu rein!


    MfG


    Vjordian :thumbsup: :thumbsup: :thumbsup: :thumbsup: :thumbsup:

  • Zitat

    Das hängt nur von den eigenen Fähigkeiten ab. Ich garantiere dir, dass ich eine GUI mit diversen Elementen ohne Koda mindestens genauso schnell, aber sauberer erstelle als irgendwer mit Koda.

    Was nichts anderes heisst, als dass Koda wesentlich verbessert gehört!
    Den Ansatz finde ich nicht schlecht, und ich bin überzeugt, dass auch die "Pro´s" Koda nutzen würden, wenn es einen Vorteil hätte!
    Im Visual Studio schreibt sich niemand (ernsthaft) seine GUI selbst, der dort enthaltene Editor ist viel zu gut, um die Zeit mit "in der Hilfe suchend nach den passenden Befehlen"-rumgehopse zu verschwenden!
    Ich jedenfalls wäre ohne die Hilfe ganz schön aufgeschmissen, gerade eine GUI mit mehreren (nicht ständig benutzten) Elementen klicke ich mir gerne in Koda zusammen, um dann "nachher" den Code zu bearbeiten und anzupassen!