Viele Sub-Funktionen in einer main Funktion hinzufügen/entfernen

  • Hallo zusammen,


    ich automatisiere zur Zeit eine Windows Installationsroutine und es gibt viele kleine Zwischenschritte bei der Konfiguration von Windows & 3rd party Installationen. Diese ganzen Schritte habe ich jetzt in jeweils eigenen Funktionen programmiert, z.B.


    _disableUAC()

    _installWinSCP()

    ...


    Bis jetzt habe ich alles gerade benötigte ausgeklammert. Jetzt möchte ich dafür eine GUI erstellen und habe mit Koda mir schon ein wenig das Layout erstellt:



    Ich stehe jetzt allerdings auf dem Schlauch: Ich möchte dass die GUI je nach gewählten checkboxen eine Reihe jeweiliger Funktionen nach drücken auf Install ausführt. Wie mache ich das am besten? Eine String variable erstellen, alle Funktionsnamen als string anhängen, String variable als main-Funktion ausführen? Oder doch irgendwie ein Array von Funktionsnamen erstellen und dann mit einer main Funktion abarbeiten??


    Da fehlt mir wohl irgendwie gerade ein wenig Kreativität :( Ich wünsche erstmal ein schönes Wochenende!


    Gruß

  • Frag doch einfach alle Checkboxen einzeln ab, du könntest sie im Array erstellen und so iterieren aber das ist eher Stilsache als Funktionalität.

    Du fügst einen Case für den Button hinzu und dann fragst du mit If BitAnd(GUICtrlRead($Checkbox), $GUI_CHECKED) Then ab ob sie gedrückt wurde.

  • Hallo zusammen,


    ich habe das in der while Schleife mal so gelöst:



    ich erhalte bei Ausführung nur ein error in expression. Das auf Knopfdruck beispielhaft eine MsgBox auftaucht und mir die korrekten Funktionen ausspuckt ist sehr provisorisch gehalten.

  • alpines Das wirft bei mir jetzt doch noch Fragen auf:


    - Funktioniert es überhaupt hinter einem Case eine If Bedingung zu setzen oder meinst du genau das mit "Wert ausgeben"?

    - Ich überlege gerade ob es eventuell nur mit cases&bitand funktioniert bzw. wie du zuerst erwähnt hattest mit if bedingungen und nur für den button einen case. Jetzt habe ich auch noch die Überlegung dass ja evtl jemand einen Haken setzt und wieder entfernt. Da funktioniert das doch gar nicht wie ich es geplant hatte mit $i+1?! Muss ich dann auch cases für das entfernen eines Hakens setzen?

  • Das Switch-Case ist für die GUI-Nachrichten im Moment und hat mit der Ausleserei deiner Checkboxen absolut nichts zu tun. (Zumindest wie du vor hast es zu implementieren)

    Nimm die ganzen Ifs und packe sie in ein Case wo der Auslöser davon der Installations Button ist.

  • error in expression. Irgendwie steig ich da nicht so richtig hinter. Auch googlen und manual bringt mich da nicht weiter: welche expression ist denn gemeint?? Es geht um Line 3228 dabei hab ich die gar nicht, schätze also irgendwo tief in den included .au3s ist der Fehler. Und sorry aber ich hab ehrlich gesagt bisher keine Skripte mit Switch case geschrieben :( 

  • OK die expression musste einfach nur direkt hinter dem switch folgen, dann gehts. ich bekomme aber immer noch nach dem buttonpress ein error unknown function. hier mal das komplette aktuelle script: EDIT: Es fehlte ein $ in der MsgBox Funktion ($MB_OK). Vielen Dank für eure Geduld und Hilfe, hier noch mal das bisherige Ergebnis für Leute mit den gleichen Fragen:


  • Schaust du dir eigentlich auch die Fehlermeldungen an? Der Interpreter schreibt dir doch in der Konsole in welcher Zeile der Fehler geschmissen wurde.


    Wenn du das ganze wirklich elegant lösen möchtest könntest du alles in Array schieben und diese dann durchgehen.

    Dann hast du am Ende ein Array mit den ganzen Daten die geprüft und ausgeführt werden sollen und nur eine Schleife in der du das Array iterierst.

  • Deaken Falls du mit SciTe programmierst: drück mal F5, dann wird das Programm direkt kompiliert und ausgeführt. Die Ausgabe steht dann in dem Fenster unten. Dann hast du auch eine vernünftige Zeile angegeben.

    Das Problem ist, dass alle Includes vor deinen Code kopiert werden, wenn du nicht fürs Debuggen kompilierst => Du bekommst die Zeile, mit allen Includes (Inhalt von MsgBoxConstants.au3,...) davor ;)

  • hallo zusammen,


    danke für deinen Tip Kanashius leider hilft mir auch dieser nicht weiter bei meinem nächsten problem:


    Ich habe ja zuvor alle If bedingungen auf Button1 durchgefragt und abschließend mir dann alle nötigen funktionen testweise als msg box ausgeben lassen:


    Code
    1. MsgBox($MB_OK,"Result",_ArrayToString($main,@CRLF))


    Das funktionierte auch ganz gut. Jetzt dachte ich eigentlich, ich lasse die MsgBox einfach weg und führe ArraytoString wie angegeben direkt aus und alle meine Funktionen werden nacheinander ausgeführt. Statt dessen bekomme ich einen Fehler: "Illegal text at the end of statement (one statement per line" in Zeile 6000 usw.


    mit F5 habe ich folgenden Output:


    >"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Users\admin\Desktop\AutoInstall\menutest2.au3"

    >Exit code: 0 Time: 1.604


    kann das so überhaupt funktionieren? Oder gibt es eine elegantere Lösung als ArrayToString um alle aktivierten Funktionen abzulaufen??


    Gruß

  • alpines Ich habe eine extra .au3 mit den ganzen Funktionen erstellt, darin nutze ich #RequireAdmin.


    mein Script mit GUI sieht jetzt so aus:


    Jetzt passiert nichts mehr wenn ich auf den Button drücke...

  • Wenn ich nach der ArrayToString() eine MsgBox anzeigen lasse taucht diese auch auf, ddaher gehe ich davon aus dass es nicht so funktioniert mit der Funktion bzw. der zusammenstellung, wie ich es mir erhofft hatte...

  • Also anscheinend hatte ich zuerst irgendwo nen typo drin. Inzwischen gibt es keinen Fehler (mehr). Wie gesagt: Wenn ich ArrayToString() in eine MessageBox packe sehe ich alles wie ich es gerne hätte. Ohne MsgBox passiert da aber nichts. Zumindest eine darauf folgende MsgBox hinter dem ArrayToString() wird wieder angezeigt. Es passiert also nichts mit dem ArrayToString Output bzw. es wird nicht ausgeführt...