Winwaitactiv timeout problem

  • Hallo,

    ich habe das Problem das in einer Function mit WinWaitActiv der timeout ja error 0 ausgeben soll wenn er in diesen läuft.
    nun habe ich danach ein Return eingebaut wenn der timeout greift, aber das Funktioniert nicht weil error immer auf 0 steht...

    selbst wenn ich am anfang der Function seterror auf 1 oder was auch immer stelle geht er in der nächsten zeile gleich wieder auf 0

    Warum ? wie kann ich das Problem lösen ? nehme ich die if @error abfrage raus dann läuft es durch.


    [autoit]


    Func close()
    SetError(1)

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

    ConsoleWrite("Errorcode1 " & @error & @CRLF) <----- error 1

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

    _au3recordsetup()
    _ffconnect()
    If _ffisconnected() Then
    $url = _fftabgetselected("label")
    $ff = $url & " - Mozilla Firefox"
    EndIf
    WinSetState($ff, "", @SW_MAXIMIZE)
    Send("{HOME}")

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

    ConsoleWrite("Errorcode2 " & @error & @CRLF) <---- error 0

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

    WinWaitActive($ff, "", 3)

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

    ConsoleWrite("Errorcode3 " & @error & @CRLF) <---- error 0

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

    if @error = 0 then Return

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

    ConsoleWrite("Errorcode4 " & @error & @CRLF) <---- error 0

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

    $ff1 = StringLeft($url, 16)
    MouseClick("left", 1173, 289, 1)
    WinWaitActive($ff1 & " - Schließen - Ticket - OTRS ITSM 3.2.9 - Mozilla Firefox", "", 3)
    if @error=0 then Return
    MouseClick("left", 309, 300, 1)
    Send(".")
    MouseClick("left", 321, 472, 1)
    MouseClick("left", 305, 525, 1)
    MouseClick("left", 519, 568, 1)
    EndFunc

    [/autoit]
  • Hab mein Post nochmal angepasst, weil ich der Meinung bin, dass ich doch nicht ganz verstanden habe, was du genau vor hast.

    Du willst vermutlich in deine Funktion zurückspringen, wenn das Fenster für eine bestimmte Zeit inaktiv war?

    Dann versuch es mal so wie hier, dass du den "Zustand" in einer Variable speicherst und abfragst.

    Hier mal 2 mögliche Varianten um den Fenster-Zustand abzufragen.

    [autoit]

    local $Status = WinWaitActive("[CLASS:Notepad]", "", 5)
    Select
    Case $Status = 0
    msgbox(0,"","Editor war 5 Sek inaktiv")
    Case else
    msgbox(0,"", "Editor ist aktiv")
    Endselect

    [/autoit]


    [autoit]

    Do
    local $Status = WinWaitActive("[CLASS:Notepad]", "", 5)
    until $Status = not 0 ; Entfernst du das not, dann geht es nur weiter wenn das Fenster 5 Sek inaktiv ist

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

    msgbox(0,"","Hier gehts nur weiter wenn das Fenster aktiv ist")

    [/autoit]

    8 Mal editiert, zuletzt von KloMeister (26. November 2014 um 13:24)

  • Hallo Progger,

    bei WinWaitActive wird nicht @error mit 0 gesetzt, sondern die Function WinWaitActive selbst liefert den Rückgabewert.

    $Rückgabe = WinWaitActive(.....
    If $Rückgabe = 0 Then ...

    Leider halten sich nicht alle Funktionen in autoit an die Konvention dass bei einem Fehler @error <> 0 zurüchgegeben wird.
    Daher empfiehlt es sich für jede Funktion in der Hilfe nachzusehen nach dem Rückgabewert ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)