Software Pack mit Auswahloption versehen

  • Hallo Leute,

    ich bin neu hier im Forum und was die Nutzung von AutoIt angeht ebenfalls. Ich hab es geschafft für unseren Clan ein kleines Softwarepacket zusammenzustellen.
    Die Installation erfolgt dabei unbeaufsichtig. Also die Programmer werden über AutoIt selbstständig installiert.

    Jetzt hab ich erfahren das man mit AutoIt eine Oberfläche erzeugen kann. Also dachte ich mir es wär sinnvoll wenn man mit hilfer einer Checkbox noch abwählen kann welche Software nicht installiert werden soll. (Weil nicht genutzt oder schon vorhanden). Bzw. einen Button zum Abrechen.

    Da ich neu bin im Umgang mit AutoIt woll ich hier Fragen wie so eine Oberfläche realisiert wird. Ich habe für die Installation eine Startdatei. In der die einzelnen Setups mit einer Include Funktion eingebunden werden.

    So sieht der Code meiner HauptAutoit datei:

    [autoit]

    SplashTextOn("Installation", "Installiere Firefox ...", 250, 100, -1, 25, 49)
    #include <source\firefox.au3>
    SplashTextOn("Installation", "Installiere Thunderbird ...", 250, 100, -1, 25, 49)
    #include <source\thunderbird.au3>
    SplashTextOn("Installation", "Installiere Teamspeak ...", 250, 100, -1, 25, 49)
    #include <source\teamspeak.au3>
    SplashTextOn("Installation", "Installiere ICQ ...", 250, 100, -1, 25, 49)
    #include <source\setupicq.au3>
    SplashTextOn("Installation", "Entferne Werbung aus ICQ...", 250, 100, -1, 25, 49)
    #include <source\icqbannerremover.au3>
    SplashTextOn("Installation", "Installiere CC-cleaner ...", 250, 100, -1, 25, 49)
    #include <source\cc-cleaner.au3>
    SplashTextOn("Installation", "Installiere Diskdefrag ...", 250, 100, -1, 25, 49)
    #include <source\diskdefrag.au3>
    SplashTextOn("Installation", "Installiere Steam ...", 250, 100, -1, 25, 49)
    #include <source\steam.au3>
    SplashTextOn("Installation", "Installiere X-Fire ...", 250, 100, -1, 25, 49)
    #include <source\xfire.au3>
    SplashTextOn("Installation", "Installiere Skype", 250, 100, -1, 25, 49)
    #include <source\skype.au3>

    [/autoit]

    Und jetzt hoff ich ob mir jemand sagen kann wie ich so eine GUI realisiere.

    Gruss Waidler

  • So ich bin schon mal Widl am GUI machen, aber wie wird das gemacht das ein abgewähltes häckchen dafür sorgt das ein Programm ausgelassen wird. Ich könnt mir vorstellen das die mit einer IF funktion realisiert werden kann. aber mehr schon nicht. Also was das auslesen einer GUI angeht bin ich total unbescholten ...

  • Hallo Waidler,

    herzlich willkommen im Forum. Am besten liest/arbeitest du dir die Kapitel:

    • GUI-Referenz - GUI_Konzepte
    • GUI Controlerstellung Funktionsreferenz, hier natürlich besonders GUICtrlCreateCheckbox und GUICtrlCreateButton
    • GUI Control Management Funktionsreferenz, hier besonders GuiCtrlRead und GuiCrlSeData

    durch.
    auch das lesen anderer Post (SuFu oder Google benutzen) kann sehr hilfreich sein.

    Viel Spass mit AutoIt wünscht mfg (Auto)Bert

    edit: sehe gerad deinen neuen Post, hier ein Demo-Skript im MessageLoop-Modus:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 553, 165, 236, 264)
    $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 352, 48, 97, 17)
    $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 352, 72, 97, 17)
    $Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 352, 96, 97, 17)
    $Button1 = GUICtrlCreateButton("Button1", 352, 120, 75, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Button2", 432, 120, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    If BitAND(GUICtrlRead($Checkbox1), $GUI_CHECKED) = $GUI_CHECKED Then
    MsgBox(0, "Checkbox1 ", "ist angeCHECKED")
    Else
    MsgBox(0, "Checkbox1 ", "ist nicht angeCHECKED")
    EndIf

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

    If BitAND(GUICtrlRead($Checkbox2), $GUI_CHECKED) = $GUI_CHECKED Then
    MsgBox(0, "Checkbox2 ", "ist angeCHECKED")
    Else
    MsgBox(0, "Checkbox2 ", "ist nicht angeCHECKED")
    EndIf
    If BitAND(GUICtrlRead($Checkbox3), $GUI_CHECKED) = $GUI_CHECKED Then
    MsgBox(0, "Checkbox3 ", "ist angeCHECKED")
    Else
    MsgBox(0, "Checkbox3 ", "ist nicht angeCHECKED")
    EndIf

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

    EndSwitch
    WEnd

    [/autoit]

    Edit2: und hier das ganze im OnEvent-Modus:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Opt('MustDeclareVars', 1)
    Opt("GUIOnEventMode", 1)

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

    #Region ### START Koda GUI section ### Form=
    Global $Form1 = GUICreate("Form1", 553, 165, 236, 264)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    Global $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 352, 48, 97, 17)
    Global $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 352, 72, 97, 17)
    Global $Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 352, 96, 97, 17)
    Global $Button1 = GUICtrlCreateButton("Button1", 352, 120, 75, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "_Check")
    Global $Button2 = GUICtrlCreateButton("Be&enden", 432, 120, 75, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "_Exit")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    While 1 ;idle-looop damit das Programm nicht sofort beendet wird

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

    Sleep(1000)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

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

    Func _Check()
    If BitAND(GUICtrlRead($Checkbox1), $GUI_CHECKED) = $GUI_CHECKED Then
    MsgBox(0, "Checkbox1 ", "ist angeCHECKED")
    Else
    MsgBox(0, "Checkbox1 ", "ist nicht angeCHECKED")
    EndIf

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

    If BitAND(GUICtrlRead($Checkbox2), $GUI_CHECKED) = $GUI_CHECKED Then
    MsgBox(0, "Checkbox2 ", "ist angeCHECKED")
    Else
    MsgBox(0, "Checkbox2 ", "ist nicht angeCHECKED")
    EndIf
    If BitAND(GUICtrlRead($Checkbox3), $GUI_CHECKED) = $GUI_CHECKED Then
    MsgBox(0, "Checkbox3 ", "ist angeCHECKED")
    Else
    MsgBox(0, "Checkbox3 ", "ist nicht angeCHECKED")
    EndIf
    EndFunc ;==>_Check

    [/autoit]

    2 Mal editiert, zuletzt von AutoBert (17. Januar 2010 um 22:27)

  • So ich hab mal eine GUI gemacht und es sogar mit meinen Bastelfähigkeiten und den bisherigen Post geschafft eine Auswahl für Skype zu machen. Die anderen folgen dann nach. Was ich noch haben will ist, das sich nach Drücken des Buttons das Fenster schliesst und die Ausgewählten Programme installiert werden.

    Mein Momentanes Codegebastle sieht so aus :

    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $Form1 = GUICreate("Software Pack", 401, 378, 242, 164)
    $Button1 = GUICtrlCreateButton("Starten", 64, 288, 57, 33, $WS_GROUP)
    $Checkbox2 = GUICtrlCreateCheckbox("Firefox 3.5", 64, 136, 97, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Checkbox1 = GUICtrlCreateCheckbox("Thunderbird 3", 64, 160, 97, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Checkbox3 = GUICtrlCreateCheckbox("Teamspeak 2", 64, 184, 97, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Checkbox4 = GUICtrlCreateCheckbox("ICQ 6.5", 64, 208, 97, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Checkbox5 = GUICtrlCreateCheckbox("ICQ Bannerremover", 64, 232, 145, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Checkbox6 = GUICtrlCreateCheckbox("Auglogiks Diskdefrag", 208, 136, 129, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Checkbox7 = GUICtrlCreateCheckbox("Steam", 208, 160, 97, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Checkbox8 = GUICtrlCreateCheckbox("Xfire", 208, 184, 97, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Checkbox9 = GUICtrlCreateCheckbox("Skype", 208, 208, 97, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Button2 = GUICtrlCreateButton("Abbrechen", 232, 288, 97, 33, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button2
    Exit
    Case $Button1
    If BitAND(GUICtrlRead($Checkbox9), $GUI_CHECKED) = $GUI_CHECKED Then
    SplashTextOn("Installation", "Installiere Skype", 250, 100, -1, 25, 49)
    #include <source\skype.au3>
    EndIf

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

    EndSwitch
    WEnd

    [/autoit]

    Mfg Waidler

  • Was macht der User wenn er mehrere Programme installieren möchte? Das Skript nach jeder Installation neu starten?

    Vieleicht ist es praktische wenn du deine $Form1 beim Start deiner skype.au3 versteckst. GUISetState(@SW_HIDE, $Form1) und nach Abschluss der Installation wieder einblendest - @SW_Show.

    Dateien inkludiert man am Anfang eines Skripts. Es ist auch nicht unbedingt well formed, die skype.au3 direkt auszuführen. Ruf lieber die Funktion der .au3 auf,.

  • Danke für den Tipp mit dem Fensterverstecken, ich hab jetzt eine zweite Software per hacken hinzugefügt zum testen. Musste aber leider feststellen, wenn ich beide häckchen setze, installiert er nur die software die als erstes in der Reihenfolge steht ;( . Es soll aber eine Software nach der anderen installiert werden. Wie stell ich das an ? ?(
    Ich dacht ich wär auch einen guten Weg, leider wurde ich eines besseren belehrt. 8|

    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $Form1 = GUICreate("Software Pack", 401, 378, 242, 164)
    $Button1 = GUICtrlCreateButton("Starten", 64, 288, 57, 33, $WS_GROUP)
    $Checkbox2 = GUICtrlCreateCheckbox("Firefox 3.5", 64, 136, 97, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Checkbox1 = GUICtrlCreateCheckbox("Thunderbird 3", 64, 160, 97, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Checkbox3 = GUICtrlCreateCheckbox("Teamspeak 2", 64, 184, 97, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Checkbox4 = GUICtrlCreateCheckbox("ICQ 6.5", 64, 208, 97, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Checkbox5 = GUICtrlCreateCheckbox("ICQ Bannerremover", 64, 232, 145, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Checkbox6 = GUICtrlCreateCheckbox("Auglogiks Diskdefrag", 208, 136, 129, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Checkbox7 = GUICtrlCreateCheckbox("Steam", 208, 160, 97, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Checkbox8 = GUICtrlCreateCheckbox("Xfire", 208, 184, 97, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Checkbox9 = GUICtrlCreateCheckbox("Skype", 208, 208, 97, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Button2 = GUICtrlCreateButton("Abbrechen", 232, 288, 97, 33, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button2
    Exit
    Case $Button1
    If BitAND(GUICtrlRead($Checkbox5), $GUI_CHECKED) = $GUI_CHECKED Then
    SplashTextOn("Installation", "Entferne Werbung aus ICQ...", 250, 100, -1, 25, 49)
    #include <source\icqbannerremover.au3>
    SplashOff()
    EndIf
    Case $Button1
    If BitAND(GUICtrlRead($Checkbox9), $GUI_CHECKED) = $GUI_CHECKED Then
    SplashTextOn("Installation", "Installiere Skype", 250, 100, -1, 25, 49)
    #include <source\skype.au3>
    SplashOff()
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    Gruss Waidler

  • Hallo Schwaidler

    in einer switch-case Abfrage wird automatisch nach dem 1. gefundenem case (Ausnahme nach ContinueCase, aber das kannst dur dir später einmal anschauen) abgebrochen dein Source musst du lso folgendermassen ändern:

    [autoit]


    .
    .
    Case $Button1
    If BitAND(GUICtrlRead($Checkbox5), $GUI_CHECKED) = $GUI_CHECKED Then
    SplashTextOn("Installation", "Entferne Werbung aus ICQ...", 250, 100, -1, 25, 49)
    #include <source\icqbannerremover.au3>
    SplashOff()
    EndIf
    If BitAND(GUICtrlRead($Checkbox9), $GUI_CHECKED) = $GUI_CHECKED Then
    SplashTextOn("Installation", "Installiere Skype", 250, 100, -1, 25, 49)
    #include <source\skype.au3>
    SplashOff()
    EndIf
    .
    .

    [/autoit]


    @ideas2code,

    Was macht der User wenn er mehrere Programme installieren möchte? Das Skript nach jeder Installation neu starten?[/quote möchte er ja gerade nicht

    warum verstecken, ich würde mir den Fortschritt z.B.mit Label und Progress auf Gui anzeigen lassen und dafür SplashTexte weglassen (aber das ist Geschmackssache)

    [quote='ideas2code',index.php?page=Thread&postID=132980#post132980]Dateien inkludiert man am Anfang eines Skripts. Es ist auch nicht unbedingt well formed, die skype.au3 direkt auszuführen. Ruf lieber die Funktion der .au3 auf,.

    üblicherweise wird es so gemacht, ist aber nicht verboten und die skype.au3 enthälz warscheins nur ein AutoItSkript ohne Aufruf, also was solls?

    mfg (Auto)Bert


  • @ideas2code,


    möchte er ja gerade nicht


    Da hab ich die Aussage "Was ich noch haben will ist, das sich nach Drücken des Buttons das Fenster schliesst und die Ausgewählten Programme installiert werden." etwas fehlinterpretiert.

    Zitat

    warum verstecken, ich würde mir den Fortschritt z.B.mit Label und Progress auf Gui anzeigen lassen und dafür SplashTexte weglassen (aber das ist Geschmackssache)


    Wie du schon sagst ... Geschmackssache. Mancheiner mag es ja auch komplett silent. Es lag mir fern ihm diese Vorgehensweise aufzuzwingen ... wollte lediglich eine Möglichkeit aufzeigen.

    Zitat

    üblicherweise wird es so gemacht, ist aber nicht verboten und die skype.au3 enthälz warscheins nur ein AutoItSkript ohne Aufruf, also was solls?


    Nunja, was soll's. Vieleicht war ich da etwas zu sehr Erbsenzähler. Ich hab einfach Grundsätzliche Regeln die ich in anderen Sprachen lernen musste auf AutoIT reflektiert. Grundsätzlich verboten ist dieses wilde inkludieren natürlich nicht, funktionieren tut es auch. Für mich, und sicher auch für einige andere, gehört sowas allerdings genauso zu einem gut strukturierten Code wie eine übersichtliche Zeileneinrückung. Aber jeder wie er mag.
    Gut ... das mit dem Aufruf der Funktion anstelle der .au3 ist vieleicht etwas übertrieben,

  • So ich wollt mich mal für die Hilfe Bedanken, ging sehr fix. Also mittlerweile hab ich es geschafft das Fenster zu verstecken währen die Setups durchlaufen und auch eine auswahl hinzugefügt, ob die GUI nach ablauf der scripts geschlossen werden soll, bzw. auch noch ein Kontrollkästchen ob die Programme mit oder ohne Autostart installiert werden sollen (wenn als Option in den Setups vorhanden). Ein vorschlag meiner Kollegen war es, die möglichkeit zu haben bei einzelnen Programmen den Installationspfad vorgeben zu können. Vorerst werd ich mal Google und die deutsche Anleitung studieren ob es funktionen gibt, die für eine Realisierung verwendet werden können.

    Trotzdem die Frage, wär sowas mit Autoit möglich? Auswahl eines Pfades (wie bei den Originalen Setups) und die Auswahl dann übergeben?

    PS: unter http://cgm.bplaced.de/setups/clanpack.zip hab ich das Softwarepacket hinterlegt, als wers testen/nutzen will kann sich es runterladen. Wer weis, vieleicht weis einer noch eine sinnvolle Verbesserung.

  • Ein vorschlag meiner Kollegen war es, die möglichkeit zu haben bei einzelnen Programmen den Installationspfad vorgeben zu können. Vorerst werd ich mal Google und die deutsche Anleitung studieren ob es funktionen gibt, die für eine Realisierung verwendet werden können.

    Trotzdem die Frage, wär sowas mit Autoit möglich? Auswahl eines Pfades (wie bei den Originalen Setups) und die Auswahl dann übergeben?

    Schau dir mal in der Hilfe die Funktionsreferenzen für Controls an (Funktionsreferenz->Fenster->Controls)

    z.B. ControlSetText