Hey,
ich schreibe mal eine Einleitung für mein Problem
(vielleicht teilweise überflüssig, aber zu viele Informationen können ja eigentlich nicht schaden):
Mein Script soll sozusagen ein Hauptfenster haben, zu dem immer wieder zurückgekehrt wird. In dem Hauptfenster sind verschiedene Buttons, über die man ein jeweils anderes Fenster (das ist jeweils ein Spiel) öffnet. Wenn man also vom Hauptfenster aus ein Spiel öffnet, soll nur das Fenster des jeweiligen Spiels offen sein und das Hauptfenster nicht. Ich hoffe, das ist einigermaßen verständlich.
Das Script ist ungefähr folgendermaßen aufgebaut:
[autoit]- includes
...
...
- globale variablen
...
...
- aufruf der funktion main()
- alle funktionen in Func/EndFunc tags
...
...
Die einzelnen Funktionen, also die main()-Funktion und die Funktionen der verschiedenen Spiele, haben alle ein eigenes mit GUICreate() erstelltes Fenster, dann eben der Code und dann jeweils eine While-Schleife:
GuiSetState()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
Exit
Case $msg = $spiel3_button ;irgendwas, z.B. ein Spiel
GUIDelete($mainGUI) ;$mainGUI ist das Hauptfenster
spiel3()
;usw.
EndSelect
WEnd
Wenn ich z.B. Case $msg = $spiel3_button ausführe, klappt alles noch wunderbar. Der Übergang geht problemlos und das Spiel auch. Wenn aber dann das Spiel beendet ist und ich zurück zum Hauptfenster will, klappt es einfach nicht! (Es klappt schon, wenn ich das Spiel durch die While-Schleife des Spiels verlasse, jedoch nicht bei Ablauf des Timers.)
In z.B. dem Spiel habe ich einen Timer, den ich so erstelle:
[autoit]$timeLeft = 60
$timer = _Timer_SetTimer($gameGUI, 1000, "timerCountdown")
Der ruft dann immer die Funktion auf:Func
[autoit]timerCountdown($hWnd, $Msg, $iIDTimer, $dwTime)
$timeLeft-=1
GUICtrlSetData($timeLeftLabel, $timeLeft)
If $timeLeft = 0 Then
_Timer_KillTimer($gameGUI, $timer)
; HIER SPIEL BEENDEN!!
MsgBox(0, "spiel zu ende", "diese msg box wird noch angezeigt")
GUIDelete($gameGUI) ; wird auch noch gelöscht
main() ; hier möchte ich einfach zurück zum Hauptfenster, klappt aber nicht
EndIf
EndFunc
Bis zum Aufruf main() in der timerCountdown()-Funktion scheint alles zu klappen. Jedoch wird dann nur noch das Fenster von main() erstellt, ohne irgendwelche Controls.
Außerdem stürzt Autoit ab. Weder Rechtsklick in der Taskleiste klappt, nocht Prozess des Scripts beenden.
Ich muss dann über den Taskmanager Autoit komplett beenden, damit es wieder geht...
Sorry, war vielleicht jetzt etwas lang, vergebt mir :s
...und bitte helft mir! Ich weiß nicht weiter
Danke im Voraus
EDIT: Beispielcode siehe Post #5