Generelle Reset Funktion

  • Guten morgen liebe Sorgen! :)

    ich stehe vor folgendem Problem:

    Ich habe ein Script bei dem mehrere Programme automatisch installiert werden. Die Selektierung, welche Programme installiert werden sollen, wird über eine GUI abgefragt (Checkboxen).

    Nun ist der Fall möglich, dass der Anwender mal meint die installation abbrechen zu müssen, weil ihm irgendwas nicht passt.

    Sobald er dies tut "hängt" sich logischerweise das Script auf, weil er auf ein Fenster wartet, welches nichtmehr kommt.

    Dann funktionieren natürlich auch keine Buttons mehr auf der GUI (wie beispielsweise "Cancel").

    Nun ist meine Frage ob es da eine generelle Funktion gibt um in so einem Fall das Script zu reseten?

    Natürlich könnte ich bei dem "WinWaitActive()" ein Timeout einbauen, aber da ich viele von diesen Aufrufen habe, würde da doch einige Zeit verstreichen, bis der User wieder das tun kann.

    Und nach jedem "WinWaitActive()" eine If-abfrage zu stellen ob er jetzt reseten soll weil das Fenster nichtmehr kommt ist auch bissel uncool!^^

    Was mir vielleicht durch den Kopf geht ist, ob es vielleicht eine Möglichkeit gibt auf den Timeout generell zu reagieren wenn ich den einbauen sollte. Sprich wenn er einmal den Timeout bei einem Befehl erreicht hat, dass er dann in die Function "Reset()" springt? Aber auch so gelöst, dass ich nicht jeden Timeout einzelnd abfragen müsste.

    Hoffe ihr wisst was ich meine.

    Habt ihr da vielleicht Ideen? Gibt es da was? Oder bin ich verloren?^^

    greetz Blade

    Weil Denken die schwerste Arbeit ist, die es gibt, beschäftigen sich auch nur wenige damit.

    Einmal editiert, zuletzt von Blade (22. März 2010 um 16:17)

  • Danke für den Hinweis!

    Das klingt auf jeden Fall schonmal sehr vielversprechend!

    Aber bei 16 zu installierenden Programmen, kommen da ein paar Fenster zusammen bei denen man die Buttons ersetzen müsste. ;(

    Also kann ich davon ausgehen dass es so einen generellen Reset nicht gibt?

    greetz Blade

    Weil Denken die schwerste Arbeit ist, die es gibt, beschäftigen sich auch nur wenige damit.

  • Also von Haus aus wird es sowas nicht geben. Du musst halt ein bisschen rumtricksen.
    Bau dir deine eigene WinWait funktion wie zb:

    Spoiler anzeigen
    [autoit]

    Func _WinWait($sTitle, $sText = -1, $iTimeOut = -1, $sProcName = -1)
    If $sText = -1 Or $sText = 0 Or $sText = Default Then $sText = ""
    If $iTimeOut = -1 Or $iTimeOut = 0 Or $iTimeOut = Default Then $iTimeOut = 60000
    If $sProcName = -1 Or $sProcName = 0 Or $sProcName = Default Then $sProcName = ""
    Local $t = TimerInit()
    Do
    Sleep(10)
    If TimerDiff($t) > $iTimeOut Then ExitLoop
    If WinExists($sTitle, $sText) Then ExitLoop
    If $sProcName <> "" Then
    If Not ProcessExists($sProcName) Then ExitLoop
    EndIf
    Until False

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

    EndFunc ;==>_WinWait

    [/autoit]

    Ist jetzt nur ein Beispiel. Innerhalb der Funktion kannst du ja machen was du willst...

  • Ich habe es befürchtet, dass es sowas nicht gibt.

    Danke für die Antwort!

    Werde mir das mit der eigenen WinWait mal durch den Kopf gehen lassen, was da für eine Umsetzung sinnvoll wäre.

    Thx für die Function!

    greetz Blade

    Weil Denken die schwerste Arbeit ist, die es gibt, beschäftigen sich auch nur wenige damit.