Position im Script wieder finden

  • Hallo,

    ich habe folgendes Problem.

    Am Anfang des Script habe ich diverse Hotkey definiert. Benutze ich einen Hotkey zum Sprung in eine Funktion geht alles Okay. Betätige ich jetzt z.b. den Hotkey für die Pause, dann springt das Programm in die Funktion Pause.

    Damit kommt das Script nicht wieder in die alte Stelle der Funktion aus dem es gekommen ist.

    Ein Funktion macht einem Mausklick an einer Stelle und dann wird z.b ein Bild gespeichert. Verlasse ich jetzt mit der Pause Funktion das Script weiß das Programm nicht mehr das es vorher in der Funktino "Mausklick und speichern" war.

    wie kann man das regeln.

    Ich habe überlegt vorher eine Vari zusetzten ist der Wert gleich 1 dann sprigen wieder in die Funktion, läuft aber nicht.

    Danke vorab ....

    gruß

  • Poste mal dein Script, weil da musst du irgent wo was merkwürdiges eingebaut haben im normalfalle kehrt das script nach abarbeiten einer function immer wieder an den ausgangspunkt zurück.

  • moin,

    denke nicht das es ein grunsätzlicher Fehler ist, evtl bin ich etwas umständlich daran gegangen ...

    Spoiler anzeigen
    [autoit]

    HotKeySet("{ESC}", "Terminate")
    HotKeySet("+!s", "speichern")
    HotKeySet("+!w", "weiter")
    HotKeySet("+!2", "weiter2")
    HotKeySet("+!5", "weiter5")
    HotKeySet("+!1", "weiter10")
    HotKeySet("+!c", "config")
    HotKeySet("+!a", "config_auslesen")
    HotKeySet("p", "pause")
    HotKeySet("{PAUSE}", "TogglePause")
    HotKeySet("+!d", "delay")

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

    ;MsgBox(4096, "-------- Info Auto_Fox ---------", "Bedienungsanleitung" & @CRLF & "Diese Hotkey sind aktive" & @CRLF & "ESC = Exit Programm" & @CRLF & "Shift plus Alt und p = Config" & @CRLF & "p = Pause" & @CRLF & "Shift plus Alt und s = speichern", 5)

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

    $pos_x = 0
    $pos_y = 0

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

    Global $Paused

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

    If Fileexists("C:\Temp\auto_fox_x.ini") then send("+!a")
    Send("+!c")

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

    Func delay()
    $delay = InputBox("-------- Info Auto_Fox ---------", "Anzeigedauer für Bilder angeben:" & @CRLF & "2 für 2sec" & @CRLF & "5 für 5sec" & @CRLF & "10 für 10sec")
    ;If $delay = 2 Then send("+!2")
    ;EndIf
    ;If $delay = 5 then send("+!5")
    ;EndIf
    ;If $delay = 10 then send("+!1")
    ;EndIf
    EndFunc

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

    Func config_auslesen()
    $pos_x = IniRead("C:\Temp\auto_fox_x.ini", "Wert x", "key", "NotFound")
    $pos_y = IniRead("C:\Temp\auto_fox_y.ini", "Wert y", "key", "NotFound")
    $save = 0
    $go = 1
    Send("{PAUSE}")
    EndFunc

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

    Func config()
    $save = 0
    $go = 1
    $pos_x = InputBox("Maus Position Horizontal eingeben", "alter Wert war 1266")
    Sleep(400)
    IniWrite("C:\Temp\auto_fox_x.ini", "Wert x", "key", $pos_x)
    $pos_y = InputBox("Maus Position Vertikal eingeben", "alter Wert war 257, 154 bei F11")
    Sleep(400)
    IniWrite("C:\Temp\auto_fox_y.ini", "Wert y", "key", $pos_y)
    MsgBox(4, "-------- Info Auto_Fox ---------", "Firefox mit F11 starten", 5)
    WinWaitActive("Mozilla Firefox")
    If Not WinActive("Mozilla Firefox") Then WinActivate("Mozilla Firefox")
    $answer6 = MsgBox(4, "-------- Info Auto_Fox ---------", "MausPosition wird geprüft, weiter?")
    If $answer6 = 7 Then
    MsgBox(4, "-------- Info Auto_Fox ---------", "Die Config wird wiederholt", 5)
    send("+!c")
    EndIf
    MouseMove($pos_x,$pos_y)
    MouseDown("left")
    MouseUp("left")
    Sleep(4000)
    $answer5 = MsgBox(4, "-------- Info Auto_Fox ---------", "Ist die MausPosition okay?")
    If $answer5 = 7 Then Send("+!c")
    MsgBox(4, "-------- Info Auto_Fox ---------", "Auto_Fox wird mit der Funktion weiter gestartet", 4)
    Send("+!w")
    EndFunc

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

    Func weiter()
    $save = 0
    $go = 1
    While 1 = 1
    MouseMove($pos_x,$pos_y)
    MouseDown("left")
    MouseUp("left")
    Sleep (4000)
    WEnd
    EndFunc

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

    Func weiter2()
    While 1 = 1
    MouseMove($pos_x,$pos_y)
    MouseDown("left")
    MouseUp("left")
    Sleep (2000)
    WEnd
    EndFunc

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

    Func weiter5()
    While 1 = 1
    MouseMove($pos_x,$pos_y)
    MouseDown("left")
    MouseUp("left")
    Sleep (5000)
    WEnd
    EndFunc

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

    Func weiter10()
    While 1 = 1
    MouseMove($pos_x,$pos_y)
    MouseDown("left")
    MouseUp("left")
    Sleep (10000)
    WEnd
    EndFunc

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

    Func speichern()
    $save = 1
    $go = 0
    While 1 = 1
    MouseMove($pos_x,$pos_y)
    MouseDown("left")
    MouseUp("left")
    Sleep(3500)
    MouseMove(1050,500)
    MouseDown("right")
    MouseUp("right")
    MouseMove(1055,572)
    MouseDown("left")
    MouseUp("left")
    WinWaitActive("Grafik speichern")
    If Not WinActive("Grafik speichern") Then WinActivate("Grafik speichern")
    Send("{ENTER}")
    ;sleep(1000)
    Wend
    EndFunc

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

    Func Terminate()
    Exit 0
    EndFunc

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

    Func pause()
    $answer = MsgBox(4, "-------- Info Auto_Fox ---------", "Das Programm steht auf PAUSE. Weiter?")
    If $answer = 7 Then
    MsgBox(4096, "AutoIt", "OK. Bye!")
    Exit
    EndIf
    $answer2 = MsgBox(4, "-------- Info Auto_Fox ---------", "Weiter mit der Speicherfunktion")
    If $answer2 = 7 Then
    ; MsgBox(4096, "AutoIt", "OK. Bye!")
    send("+!w")
    EndIf
    send("+!s")
    EndFunc

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

    Func TogglePause()
    $Paused = NOT $Paused
    While $Paused
    sleep(100)
    ToolTip('Script is "Paused"',0,0)
    WEnd
    ToolTip("")
    Sleep(100)
    Send("+!s")
    EndFunc

    [/autoit]


    Die Idee war das man einen Mausclick hat, aber auch wählen kann zwischen einer Speicherfunktion und einer Config, incl Pause. Als "Luxus" gilt das das Programm die Configwert abspeichert und beim Start wieder einliest und prüft.

    Sollte es einfacher gehen, bin ich gerne bereit es umzuschreiben.

    Gruß


    Edit BugFix: formatiert und Tags gesetzt

    3 Mal editiert, zuletzt von BugFix (10. August 2008 um 11:08)

  • 1. Bearbeite bitte deinen Post nochmal und häng vor den script ein "[ autoit ]" und dahinter ein "[ /autoit ]" dann liest sich das auch mal etwas besser.

    2. Welche function ist das die dir ärger macht.

  • moin,

    den Befehl habe ich gesetzt ... bewirkt aber nichts ..???

    Mir geht es um jede Funktion, sobald ich die Funktion verlasse springt das Script nicht dorthin zurück.

    Denke eher das es ein allgemeiner Denkfehler ist ..

  • uiuiui ganz schön unsauber der script da ist ja gleich einiges im argen

    3 Mal editiert, zuletzt von h00k (10. August 2008 um 11:21)

    • Offizieller Beitrag

    Also mehrere Punkte:
    - Warum werden in deinen Funktionen immer Endlosschleifen ausgeführt ??
    - Wenn du Variablen innerhalb von Funktionen mit Werten bestückst (z.B. Lesen INI) um sie dann außerhalb dieser Funktion zu verwenden, mußt du diese Variablen als Global deklarieren! (Sonst sind sie nicht verfügbar außerhalb der Funktion)
    - Bei der Verwendung von Endlosschleifen brauchst du nicht: While 1 = 1 schreiben, es reicht: While 1, oder besser: While True.

    Zum Anderen solltest du mal checken, ob du nicht mit ControlCommand(), ControlSend().. arbeiten kannst. Mausklickerei sollte wirklich nur dann verwendet werden, wenn kein anderer Weg zum Ziel führt.

  • also die Grundfunktion soll sein:

    -ein Mausklick an Pos x 1266 und Pos y 154
    -der Klick soll variabel sein ( 2,5,10 secund verzögerung )
    -die Position soll einstellbar sein
    -und die Speicherfunktion wie im Script unter speichern ( Mauspos ändern, rechtsklick, warten auf Fenster dann ein send enter und wieder zum Mausklick

    gerne nehme ich ein anderen Gedankengang entgegen.

    gruß

    • Offizieller Beitrag

    Verwende eine Schleife in der alles abläuft, verändere mit den Hotkeys nur Variablen, deren Wert dann in der Schleife ständig geprüft wird und entsprechend reagiert wird.
    Hier mal als Bsp. für verschiedene Sleepzeiten, bei Ausführen des Hotkeys wird die Sleep-zeit festgelegt und eine Boolsche Variable für die Überprüfung, ob ein Sleep ausgeführt werden soll, auf True gesetzt. Analaog kannst du alle anderen Dinge so integrieren.

    Spoiler anzeigen
    [autoit]

    HotKeySet("{ESC}", "Terminate")
    HotKeySet("+!2", "Sleep2")
    HotKeySet("+!5", "Sleep5")
    HotKeySet("+!1", "Sleep10")

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

    Global $iSleep, $bSleep = False

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

    While True
    If $bSleep Then
    Sleep($iSleep)
    $bSleep = False
    EndIf
    Sleep(10) ; wegen Prozessorlast
    WEnd

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

    Func Terminate()
    Exit
    EndFunc

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

    Func Sleep2()
    $iSleep = 2000
    $bSleep = True
    EndFunc

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

    Func Sleep5()
    $iSleep = 5000
    $bSleep = True
    EndFunc

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

    Func Sleep10()
    $iSleep = 10000
    $bSleep = True
    EndFunc

    [/autoit]
  • denke das wäre die Routine .... geht aber nicht ...

    [autoit]


    While True
    If $bSleep Then
    Sleep($iSleep)
    $bSleep = False

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

    MouseMove($pos_x,$pos_y)
    MouseDown("left")
    MouseUp("left")
    EndIf
    Sleep(10) ; wegen Prozessorlast
    WEnd

    [/autoit]

    dachte in der Schleife wird alles wiederholt, so müsste nachen dem Sleep doch wieder der Maus Befehl kommen ... , oder?


    Edit BugFix: Tags OHNE Leerzeichen [ autoit ]

    Einmal editiert, zuletzt von BugFix (10. August 2008 um 17:38)

    • Offizieller Beitrag

    dachte in der Schleife wird alles wiederholt, so müsste nachen dem Sleep doch wieder der Maus Befehl kommen ... , oder?


    Nein, nur per Hotkey wird die Prüfvariable $bSleep auf True gesetzt und somit kann der If-Zweig abgearbeitet werden. Macht ja auch wenig Sinn immer auf derselben Stelle zu klicken.
    Aber vllt. würde es helfen, wenn du mal verrätst, was du machen willst.

  • hi Bugfix,

    ich prüfe händisch in einem Forum Bilder, leider musste ich bisher dies immer manuelle machen.

    Um eine automatischmus zu bekommen dachte ich ich programmiere ein Script.

    Ja und da ist das erste Prob, das Denken ... ;>;)

    Spaß, also das Script muss an der Stelle pos_x und pos_y einen Mausklick machen, Sec x verweilen und in dieser Zeit entscheide ich ob das Bild gespeichert wird, oder nicht. Also auch hier wieder mit einem Hotkey ne Speicherfunktion. Evtl auch eine Art autospeichern dann wird halt jedes Bild das angezeigt wird gespeichert.


    kl Edit:

    ich prüfe erstmal die ganzen Funktionen und deren Auswirkungen ... da fehlt es mir wohl, aber so langsam .... man muss es hlat ers verstehnen sonst bringt es überhauptnichts ....

    Gruß

    Einmal editiert, zuletzt von firewalldevil (10. August 2008 um 19:19)