Problem mit Sleep Befehl - Auf Umwegen gelöst

  • Hallo

    ich versuche mir gerade ein Script zum erstellen von Zoomify Datewien in Photoshop zu erstellen. Läuft auch alles perfekt, nur das er ohne Sleep Befehl die Tastenkombi "!fez" abschicken will bevor das Bild überhaupt geladen hat. Jetzt habe ich es mit allen variationen von Sleep und Wait versucht, insofern mit Erfolg das dass Script wirklich pausiert, jedoch nach dem Sleep einfach nicht wieder startet und damit die Menüfunktionen nicht abarbeitet :(

    Hoffe mir kann einer einen Tipp geben woran es liegen könnte oder wie man es anders lösen kann.

    Grüße
    Thorsten

    [autoit]

    For $I=1 to $FileList[0]
    ;Öffnen des Photos
    Send("^o")

    ;Warten bis Öffnen aktiv
    WinWaitActive("Open")

    ;Eingeben des zu öffnenden Photos
    Send($Folder&"\"&$FileList[$I]&"{ENTER}")

    ;Warten bis Bild geladen
    Sleep(1000)

    ;Aufrufen der Zoomify - Funktion
    Send("!fez")

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

    ;Warten bis Zoomify aktiv
    WinWaitActive("Zoomify™ Export")

    ;Angeben des Dateinamen
    Send("ProklamationKinder"&$I-1)

    ;Springen zur Qualität
    Send("{TAB}12{TAB 3}333{TAB}500{TAB}{-}{ENTER}")

    ;Schließen des Photos
    Send("^w")
    Next

    [/autoit]

    Einmal editiert, zuletzt von Gast001 (16. November 2009 um 15:07)

  • Er macht nach einem Sleep nicht weiter? Kann ich mir irgendwie schlecht vorstellen^^
    Sonst Probier doch mal Timer.

  • Hi,

    es wäre besser wenn Du die Control... Funktionen nutzen würdest.
    Aber vielleicht hilft dir diese kleine Änderung ja schon weiter ...

    Spoiler anzeigen
    [autoit]

    Opt ("WinTitleMatchMode", 2)

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

    For $I=1 to $FileList[0]
    ;Öffnen des Photos
    Send("^o")

    ;Warten bis Öffnen aktiv
    If (WinWaitActive("Open", "", 5)) Then ; höchstens fünf Sekunden warten, dann weiter ...

    ;Eingeben des zu öffnenden Photos
    Send($Folder&"\"&$FileList[$I]&"{ENTER}")

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

    ;Warten bis Bild geladen
    Sleep(1000)

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

    ;Aufrufen der Zoomify - Funktion
    Send("!fez")

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

    ;Warten bis Zoomify aktiv
    If (WinWaitActive("Zoomify™ Export", "", 5)) Then ; höchstens fünf Sekunden warten, dann weiter ...

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

    ;Angeben des Dateinamen
    Send("ProklamationKinder"&$I-1)

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

    ;Springen zur Qualität
    Send("{TAB}12{TAB 3}333{TAB}500{TAB}{-}{ENTER}")

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

    ;Schließen des Photos
    Send("^w")
    EndIf
    EndIf

    Next

    [/autoit]


    Gruß
    Greenhorn


  • Hi

    @NoName: Er hat tatsächlich nicht weitergemacht, warum weiß ich allerdings auch nicht ;(

    Greenhorn: Danke für deinen Tip, jetzt läuft er zwar weiter, bearbeitet das erste Bild jedoch überhaupt nicht ... Er wartet also die 5s, öffnet dann das nächste Bild und arbeitet ganz normal weiter, auch mit dem Sleepbefehl. Wieso er den Sendbefehl nach dem Sleep beim ersten Bild nicht sofort ausführt, sondern es komplett überspringt, wäre allerdings noch eine Frage wert^^
    Trotzdem schonmal vielen Dank für die Hilfe.

    Gast001

    2 Mal editiert, zuletzt von Gast001 (15. November 2009 um 23:04)

  • Bau doch mal an den besagten stellen mit sleeps sowas hier ein

    [autoit]

    If Sleep(3000) then ConsoleWrite("Sleep(..) vorrüber"&@CRLF)

    [/autoit]

    Ansonsten machst du das gleiche bei den Send() befehlen, um zu sehen ob sie abgearbeitet wurden.
    Dann versuch das Fenster bevor du mit Send arbeitest nochmal in den Fokus zu holen (WinActivate)
    Oder besser: benutze ControlSend, ControlClick & co.

  • ich würde es mit pixelgetcolor statt des sleeps zu nutzen, da der PC je nach auslastung möglicherweise etwas länger braucht, um das Bild zu laden.
    z.b. Soetwas:

    [autoit]

    $x=100
    $y=100
    ;Ich habe leider kein Photoshop wodurch ich den Bereich nicht angeben kann, in dem das Bild geladen wird
    $standardfarbe = 123456
    ;Die Farbe stimmt natürlich auch nicht :P
    While Pixelgetcolor($x, $y) = $standardfarbe
    sleep(10) ; wegen der Prozessorauslastung
    Wend
    sleep(2000); damit Photoshop die Ressource laden kann und sich auf den Hotkey "vorbereiten" kann

    [/autoit]

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Hi,

    danke für eure Tips. Ich hab das Script jetzt noch mit einem Sleep am Ende der Schleife ergänzt. Jetzt arbeitet er alles so ab wie er es soll, dauert zwar durch die langen Pausen etwas länger, aber dafür überspringt er nicht einfach mal ein paar Befehle weil das Script schon weiter ist als Photoshop (bezogen auf das letzte Sleep, da da Bild ja erst gespeichert werden muss bevor man den Befehl zum öffnen des nächsten abschicken kann). Und das ConsoleWrite hab ich einfach durch einen billigen Send ersetzt^^

    Wie das mit der Farbe gehen soll weiß ich leider nicht, da sich der Bereich ja ändern kann, je nach Fenstergröße und die Farben der Bilder ja auch immer verschieden sind ...

    [autoit]

    For $I=2 to $FileList[0]
    ;Öffnen des Photos
    Send("^o")

    ;Warten bis Öffnen aktiv
    If (WinWaitActive("Open", "", 1)) Then ; höchstens zwei Sekunden warten, dann weiter ...

    ;Eingeben des zu öffnenden Photos
    Send($Folder&"\"&$FileList[$I]&"{ENTER}")

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

    ;Warten bis Bild geladen
    Sleep(1250)
    If Sleep(1250) then Send("{UP}{DOWN}")

    ;Aufrufen der Zoomify - Funktion
    Send("!fez")

    ;Warten bis Zoomify aktiv
    If (WinWaitActive("Zoomify™ Export", "", 2)) Then ; höchstens fünf Sekunden warten, dann weiter ...

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

    ;Wählen des Ausgabeordners
    ;Send("!o")

    ;Warten bis Zoomify aktiv
    ;WinWaitActive("Zoomify™ Export")

    ;Angeben des Dateinamen
    Send("ProklamationKinder"&$I-2)

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

    ;Springen zur Qualität
    Send("{TAB}12{TAB 3}500{TAB}333{TAB}{-}{ENTER}")

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

    ;Schließen des Photos
    Send("^w")

    Sleep(5000)
    EndIf
    EndIf

    Next

    [/autoit]

    Das mit dem ControlSend hab ich mal versucht, bin aber gescheitert, weil das Fenster ja erst existiert, nachdem ich es über die Menüsteuerung aufgerufen habe. Kann aber auch sein dasy ich da was falsch gemacht habe. Glaub aber insgesamt das es etwas umständlicher ist, da ich in insgesamt 4 Felder was schreiben und ein Feld den Haken entfernen muss (rot). Hab einfach mal ebend zwei Bilder zur Verdeutlichung angehängt. Vllt. kann mir ja doch einer erklären wie es funktioniert.
    [Blockierte Grafik: http://ersteselmerkg.er.funpic.de/Untitled-1.jpg] [Blockierte Grafik: http://ersteselmerkg.er.funpic.de/Untitled-2.jpg]

    Schöne Grüße
    Gast001