...Wait...

  • hi leute...

    ich habe eine frage ;)

    also ich möchte gerne die funktionen
    ProcessWaitClose
    WinWait

    und zwar gleichzeitig... also so das beide daruf warten... und wenn eins von beiden eintritt soll er weitere hübsche sachen machen...

    also wie kann ich beide "lauern" lassen ohne das nach der ersten funktion ProcessWaitClose das script stehen bleibt... weil er soll ja noch WinWait "starten" und wenn er beide gestartet hat soll er warten ob eins von den beiden eintritt

    kann mir da vll jemand helfen...

    greets Pr0vieH

    • Offizieller Beitrag

    Hi!

    Das ist der prinzipielle Ansatz:
    http://huggy.pytalhost.com/index.php?titl…ge_ich_es_ab.3F

    Einfach das eine WinExists durch ProcessExists ersetzen. Wenn auf beides gleich reagiert werden soll, kannst du auch beides in eine If-Klausel zusammenziehen (mit Or).

    peethebee

    • Offizieller Beitrag

    Hallo!

    Das sollte so gehen, hoffentlich hilft es dir weiter :musik2:

    Spoiler anzeigen
    [autoit]

    $process = "explorer.exe"
    $win = "Total Commander"
    While ProcessExists($process);Solange der Process existiert soll er die schleife halten, wenn er nicht mehr existiert dann wird die schleife beendet
    If Not WinExists($win) Then ExitLoop;Wenn das fenster nicht mehr existiert dann soll die schleife beendet werden
    Sleep(100);Damit der CPU nicht 100%ig ausgelastet ist
    WEnd
    MsgBox(0,"","Prozess/Fenster existiert nicht mehr!")

    [/autoit]

    Mfg Spider

    Edit: Schit... pee war schon wider schnelle :rolleyes: kannst du nicht mal etwas langsamer sein? mensch mensch mensch :keks:

  • Zitat

    Original von gtaspider
    Sleep(100);Damit der CPU nicht 100%ig ausgelastet ist

    genau das will ich vermeiden... da ich mehrere sachen checken will... und dann lass mal 3 sachen checken mit sowas... dann haste deine 100% wieder drin... deswegen dieses exakte wait... weil man damit auch sofort reagieren kann und nicht erst in wenn sleep rum ist... ;) also ansich habe ich es ja schon... und zwar mit 3 extra scripten... die ich anschmeiße und es funst prima... nur wollte ich es halt zusammen fassen aber wenns nicht geht.... dann hilft auch ne bat... um alle 3 zu starten ;)

    thx erstmal für die schnellen antworten :)

    btw. könnte man die ich sag mal bis jetzt 3 anderen scripte nicht mit dllcall oder so aufrufen ?

    greets Pr0vieH

    Einmal editiert, zuletzt von Pr0vieH (16. Dezember 2006 um 22:09)

    • Offizieller Beitrag

    Hallo!

    Ja das mit den 3 extra skripten wäre dann natürlich eine not lösung (auch die einzigste soweit ich das sehen kann) Aufrufen der scripte machst du dann mit Run (was willst du mit DllCall? Mit DllCall kannst du dlls öffnen!) bzw ShellExecute oder mit _runDos()

    Mfg Spider

  • gut gut dann lass ich es so... ich hab jetzt ne GUI gebastelt wo ich jedes Script starten kann... damit ist das schonmal ganz hübsch ;) aber ist halt doof das man dann für jede "sache" ne exe laufen hat xD aber egal...

    thx für die antworten jungs :)

    greets Pr0vieH

  • ok hier mal die 2 grund funktionen die zudem warscheinlich schlecht geproggt sind... aber sie funzen...

    WinWait auf "JIT Debugging" Msg.

    Spoiler anzeigen
    [autoit]

    Do
    WinWait("JIT Debugging","")
    WinExists("JIT Debugging","")
    WinActivate("JIT Debugging","")
    WinClose("JIT Debugging", "")
    FileWriteLine ("Restarterlog.txt", TimeStamp() &" - JIT Debugging Msg. Error Msg. closed...")
    If WinExists("JIT Debugging") Then
    WinActivate("JIT Debugging","")
    WinClose("JIT Debugging", "")
    EndIf
    If WinExists("JIT Debugging") Then
    ProcessClose("mangosd.exe")
    EndIf
    $msg=0
    Until $msg=1
    Func TimeStamp()
    $far=@MON & "-" & @MDAY & "-" & @YEAR & " / " & @HOUR & ":" & @MIN & ":" & @SEC
    Return $far
    Endfunc

    [/autoit]

    ProcessWaitClose für das besagte programm...

    Spoiler anzeigen
    [autoit]

    Do
    Sleep(1000)
    ProcessWaitClose("mangosd.exe")
    sleep(500)
    ProcessClose("mangosd.exe")
    Sleep(1000)
    run ("mangosd.exe", "")
    FileWriteLine ("Restarterlog.txt", TimeStamp() &" - MaNGOS Restarted...")
    $msg=0
    Until $msg=1
    Func TimeStamp()
    $far=@MON & "-" & @MDAY & "-" & @YEAR & " / " & @HOUR & ":" & @MIN & ":" & @SEC
    Return $far
    Endfunc

    [/autoit]

    btw. ich habe die abfragen alle ein wenig verdoppelt da es kleine problemchen gab und ich dachte es liegt daran aber es ist ein anderes problem... ;) aber vll habt ihr dafür auch eine lösung... und zwar läuft die ganze sache auf einem RootServer... und wenn man sich mit Remotedesktop einloggt funst das Script prima! aber ist man ausgelogt funst es nicht... weil windows dann im Anmelde Bildschirm hängt... und die Error Msgs. nicht ausgibt aufm desktop... hat jemand ne idee wie man das vll verhindern kann ?

    greets Pr0vieH

  • wenn du alles in einem skript im prinzip parallel laufen lassen willst dann hätte ich auch noch einen vorschlag:

    ich habe selbst grad ein neues thema über multi-threadung erstellt und da es sowas in autoit nicht gibt sind wir auf die funktion AdLibEnable() gekommen. ich würde sagen das wäre eine gute lösung für dein problem!?

    mfg | mR. sEx p!sT0Ls

  • yes i know... ;)

    aber kann man diese funktion mit wait füttern ? und das mehrmals ?
    ich habe diese funktion schon "gefunden" aber noch net ausprobiert... das prob wird sein das ich da warscheinlich auch wieder nur mit exist usw. arbeiten kann und das bedeutet wieder hohe sysleistung... und genau das ist das was ich üüüberhaupt nicht gebrauchen kann auf meinem server... xD aber ich werds bei gelegenheit mal ausprobieren...

    weil imo läufts super... bis auf das problem mit dem remotedesktop ist es eigendlich hübsch so... ;) reagiert vor allem sau schnell :D und nicht erst in x ms :P

    greets Pr0vieH

    • Offizieller Beitrag

    schon 10 ms Sleep nach jeden Check setzen die Systenlast auf max. 5%, eher deutlich weniger. Nimmst du 100 ms, dann dürfte sie quasi bei 0% liegen. Das ist kein Problem. Und dabei würde es ja durchschnittlich nur 0,05 sec dauern, bis ein aktives Fenster auch die entsprechende Reaktion auslöst - das sollte wirklich zu verschmerzen sein, denke ich.

    peethebee

    • Offizieller Beitrag

    Hi,

    also zu deinem ersten Skript:

    Ähhhh, nein! Das solltest du anders machen. :hammer:

    Kannst du mal in Prosa beschreiben was es machen soll?

    Ich kommentiere es mal:

    Spoiler anzeigen
    [autoit]


    Do
    WinWait("JIT Debugging", "") ; wartet bis das Fenster existiert
    WinExists("JIT Debugging", "") ; warum das nochmal ????
    WinActivate("JIT Debugging", "") ; Fenster aktivieren "Fokus" drauf legen
    WinClose("JIT Debugging", "") ; dann schließen? Geht auch ohne Fokus!
    FileWriteLine("Restarterlog.txt", TimeStamp() & " - JIT Debugging Msg. Error Msg. closed...") ; ok is klar :)
    If WinExists("JIT Debugging") Then ; Nochmal ???
    WinActivate("JIT Debugging", "")
    WinClose("JIT Debugging", "")
    EndIf
    If WinExists("JIT Debugging") Then ; müsste jetzt 3x da sein, damit hier was passiert, oder?
    ProcessClose("mangosd.exe")
    EndIf
    $msg = 0 ; warum immer wieder auf null setzen?
    Until $msg = 1

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

    Func TimeStamp()
    $far = @MON & "-" & @MDAY & "-" & @YEAR & " / " & @HOUR & ":" & @MIN & ":" & @SEC
    Return $far
    EndFunc ;==>TimeStamp

    [/autoit]

    So long,

    Mega

  • Zitat

    Original von Pr0vieH
    btw. ich habe die abfragen alle ein wenig verdoppelt da es kleine problemchen gab und ich dachte es liegt daran aber es ist ein anderes problem... ;) aber vll habt ihr dafür auch eine lösung... und zwar läuft die ganze sache auf einem RootServer... und wenn man sich mit Remotedesktop einloggt funst das Script prima! aber ist man ausgelogt funst es nicht... weil windows dann im Anmelde Bildschirm hängt... und die Error Msgs. nicht ausgibt aufm desktop... hat jemand ne idee wie man das vll verhindern kann ?

    greets Pr0vieH

    deswegen die 1000 abfragen usw. weil ich wie gesagt dachte das prob liegt daran... aber habe dann festgestellt das es an dem remotedesktop liegt... zwecks "Anmelde Screen"... also von dahher noch die vielen doppelten sachen... ;)

    peethebee ich habe es aber ausprobiert und bin irgendwie immer bei 100% syslast gelandet... :/ und im großen und ganzen funst es super! mit den 3 scripten hab jetzt auch ne gui zum starten und ich denk ich werds so lassen ;)
    "Never change a running System" hehe

    greets Pr0vieH

    • Offizieller Beitrag

    Hi,

    na ja. Zum Punkt "never touch a running system" kann ich nur sagen - lieber ja, denn dann weiß ich auch in Zukunft was das Skript macht wie es funktioniert.

    Wie willst du das Skript später mal anpassen, wenn du nicht weißt warum es gerade funktioniert bzw. Dinge einfach falsch sind, aber tortzdem funktionieren.

    So long,

    Mega

    P.S.: Nur eine Anmerkung!