hey leute ich hab da mal ne frage ich kenn mich noch nicht so gut aus in autoit
könnt ihr mir sagen wie ich das mache
user startet starter.exe
fenster öffnet sich mit begrüßungstext
"Zum Downloaden Jetzt Starten drücken"
user klickt
fenster geht zu und der downloader startet...
ich hab gesehn wie man eine 2 exe startet
aber wie bekomm cih alles in eine au3?
Er möchte es aber in einer .au3. Dafür kann man entweder den GUIOnEventMode verwenden, oder den Erweiterungsparameter von GUIGetMsg() benutzen.
Hier mal ein simples Beispiel für Letzteres:
Code:
$GUI1 = GUICreate("Starter", 200, 200)
$B_ShowGUI2 = GUICtrlCreateButton("Download starten!", 0, 0, 200, 200)
$GUI2 = GUICreate("Downloader", 200, 200)
$B_ShowGUI1 = GUICtrlCreateButton("Zurück zum Starter!", 0, 0, 200, 200)
GUISetState(@SW_SHOW, $GUI1)
While Sleep(25)
$Msg = GUIGetMsg(1)
;$Msg[0] = 0, EventID oder ControlID
;$Msg[1] = Windowhandle von dem das Event ausgelöst wurde
If $Msg[1] == $GUI1 Then ;wenn das Event von der 1. GUI stammt
If $Msg[0] == $B_ShowGUI2 Then ;wenn der Betton der 1. GUI betätigt wurde
MsgBox(64, "Info", "Hallo, blablabla...")
GUISetState(@SW_HIDE, $GUI1) ;1. GUI ausblendem
GUISetState(@SW_SHOW, $GUI2) ;2. GUI einblendem
EndIf
ElseIf $Msg[1] == $GUI2 Then ;wenn das Event von der 2. GUI stammt
If $Msg[0] == $B_ShowGUI1 Then ;wenn der Betton der 2. GUI betätigt wurde
GUISetState(@SW_HIDE, $GUI2) ;2. GUI ausblendem
GUISetState(@SW_SHOW, $GUI1) ;1. GUI einblendem
EndIf
EndIf
If $Msg[0] == -3 Then Exit ;Global Const $GUI_EVENT_CLOSE = -3
WEnd
Sieht auf den ersten Blick vielleicht komplizierter aus als es ist. In der Hilfe ist alles genau beschrieben.
Am Anfang des Skriptes werden einfach 2 GUIs erstellt, wovon eine davon versteckt wird. Nach dem Klicken auf dem Button " Weiter " wird die erste GUI dann versteckt und die zweite GUI, welche am Anfang versteckt wurde, sichtbar.
Ressourcenschonend sind diese Methoden allerdings nicht. Optimalerweise erstellt man ein GUI dann, wenn es benötigt wird, und schließt es auch dann wieder, wenn es nicht mehr benötigt wird.
Für den ersten Teil reicht der schon gepostete Code aus, für den zweiten brauchst du noch GUIDelete().
Ich würde sagen dass in heutiger PC-Zeit beides völlig egal ist. :/
das ist nicht richtig....
effizienz ist immer wichtig. man kann sicherlich sagen das es nichtmehr so wichtig ist wie früher speicherschonend zu arbeiten. dh der user kann auch gerne 1-2 grafiken in sein script einbauen. das heist aber nicht, dass wir nun inneffizienten, "dummen" code fabrizieren sollten...
Ich würde sagen dass in heutiger PC-Zeit beides völlig egal ist. :/
Für dieses Beispiel ist es das wohl wahr, dem stimme ich zu.
Aber Ressourcen sollten nicht unnötig verbraucht werden, das ist eine Regel, die ihre Gründe hat. Oder stell dir vor, die Programmierer von Windows hätten auch so etwas gemacht und würden all ihre Dialoge schon "öffen" haben und anschließend nur anzeigen, wenn man z.B. den Explorer öffnet.
Quote:
Originally Posted by lolkop
das ist nicht richtig....
effizienz ist immer wichtig. man kann sicherlich sagen das es nichtmehr so wichtig ist wie früher speicherschonend zu arbeiten. dh der user kann auch gerne 1-2 grafiken in sein script einbauen. das heist aber nicht, dass wir nun inneffizienten, "dummen" code fabrizieren sollten...
Es geht um Prinzipien. Das Beispielskript, das der TE haben wollte, benötigt die Dialoge jeweils nur einmal. Warum sollte er sie also die ganze Zeit im Speicher haben?
Wenn er sie immer wieder benötigt, sehe ich kein Problem damit, die Dialoge offen zu lassen und sie nur zu verstecken. Ich würde es sogar bevorzugen, weil deutlich weniger Rechenoperationen ausgeführt werden. Beim Programmieren muss man im Kontext entscheiden, was die angebrachte Methode ist.