[FRAGE] AutoIT startbutton

01/26/2012 20:07 Stamm1994#1
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?
01/26/2012 20:55 Lawliet#2
Code:
Guicreate("Downloader", 100, 100)
$button = Guictrlcreatebutton("Jetzt starten", 0, 0, 100, 25)
Guictrlcreatelabel("Zum Downloaden Jetzt Starten drücken", 10, 0, 100, 25)
guisetstate(@sw_show)
while 1
$msg = guigetmsg()
if $msg = $button then _start()
wend

Func _start()
run(@scriptdir & "\exe2.exe")
exit
endfunc
Koordinaten noch anpassen, ned getestet
01/26/2012 23:06 KDeluxe#3
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.
01/28/2012 16:16 xShizoidx#4
Die einfachste Methode , um eine zweite GUI zu öffnen und die alte zu verstecken, wäre diese hier :

Code:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
$GUI = GUICreate("Beispiel", 129, 52, 192, 124)
$ButtonWeiter = GUICtrlCreateButton("Weiter", 16, 8, 75, 25)
GUISetState(@SW_SHOW,$GUI)
$GUISecond = GUICreate("Beispiel", 615, 438, 192, 124)
$ButtonBeenden = GUICtrlCreateButton("beenden", 304, 168, 75, 25)
GUISetState(@SW_HIDE,$GUISecond)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $ButtonWeiter
	    GUISetState(@SW_HIDE,$GUI)
            GUISetState(@SW_SHOW,$GUISecond)
		Case $ButtonBeenden
			Exit
	EndSwitch
WEnd
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.
01/28/2012 18:55 FichteFoll#5
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().
01/29/2012 00:08 lolkop#6
was soll denn darann ressourcen schonend sein?

bevor ich x mal ein gui erstelle und es wieder schließe, nutze ich lieber eines, welches ich bei bedarf kurz sichtbar machen kann.
01/29/2012 00:16 Buffmebuffyou#7
Ich würde sagen dass in heutiger PC-Zeit beides völlig egal ist. :/
01/29/2012 00:46 lolkop#8
Quote:
Originally Posted by Buffmebuffyou View Post
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...
01/29/2012 15:25 FichteFoll#9
Quote:
Originally Posted by Buffmebuffyou View Post
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 View Post
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.
01/31/2012 17:55 Everything™#10
I can help you pn me your skype addy