exit loop hotkey

  • Hallo
    ich möchte in diesem kleinen script einen hotkey einfügen, der mit aus dem loop springt .
    habe es hiermit probiert.

    [autoit]

    #include <IE.au3>
    Hotkeyset("{F7}","Ende")
    Func Ende ()
    While 1
    ExitLoop
    WEnd
    EndFunc

    [/autoit]


    Das macht allerdings garnichts.
    ohne das while 1
    und wend wird mir ein fehler ausgegeben.
    ich möchte ganz einfach erreichen dass mir eine meesagebox ausgegeben wird mit der nummer wo man gerade war.
    also beim wievielten link.

    [autoit]

    $oIE = _IECreate ("link 1",1)
    Local $i = 0
    while 1 ;hier stehen ca 120 bis 190 links
    _IENavigate($oIE, "link2",0)
    sleep(10000)
    $i = $i + 1
    _IENavigate($oIE, "link3",0)
    sleep(10000)
    $i = $i + 1
    _IENavigate($oIE, "link4",0)
    sleep(10000)
    $i = $i + 1
    wend
    MsgBox(0, "Value of $i is:", $i)

    [/autoit]


    Ich hoffe auf Hilde. Vielen Dank im vorraus

  • Aus einer Endlosschleife springen lässt sich so realisieren:

    [autoit]


    HotKeySet("{ESC}", "_Exit")
    $bRun = True

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

    While $bRun
    ;Code
    WEnd

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

    MsgBox(64, "", "Schleife beendet!")

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

    Func _Exit()
    $bRun = False
    EndFunc

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

    lg chess

  • [autoit]


    HotKeySet("{ESC}", "_Exit")
    $bRun = True

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

    While $bRun
    $oIE = _IECreate ("link 1",1)
    Local $i = 0
    _IENavigate($oIE, "link2",0)
    sleep(10000)
    $i = $i + 1
    _IENavigate($oIE, "link3",0)
    sleep(10000)
    $i = $i + 1
    _IENavigate($oIE, "link4",0)
    sleep(10000)
    $i = $i + 1
    WEnd

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

    MsgBox(64, "", "Schleife beendet!")

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

    Func _Exit()
    $bRun = False
    EndFunc

    [/autoit]

    Hier passiert rein garnichts...
    es wird abgearbeitet aber ich kann mit esc nicht abbrechen^^

  • ähm ich möchte aber dass der loop dann nicht komplett durchläuft sondern zu einem völlig beliebigen punkt herausspringen, ansonsten brint mir das ganze ja garnichts.
    daher auch der versuch mit exit loop

  • Das ist wohl so nicht realisierbar. Allerdings könnte man dein Skript so ummodeln:

    [autoit]


    #include <IE.au3>

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

    HotKeySet("{ESC}", "_Exit")
    $bRun = True

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

    $oIE = _IECreate("link 1", 1)

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

    Local $aLinks[4] = ["LINK1", "LINK2", "LINK3", "LINK4"]

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

    $i = 0

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

    While $bRun
    _IENavigate($oIE, $aLinks[$i], 0)

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

    If $i = UBound($aLinks) - 1 Then
    $i = 0
    Else
    $i += 1
    EndIf

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

    Sleep(10000)
    WEnd

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

    MsgBox(64, "", "Schleife beendet!")

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

    Func _Exit()
    $bRun = False
    EndFunc ;==>_Exit

    [/autoit]

    So besser?

    lg chess

  • Hm funktionieren würde es theoretisch.
    Allerdings wird wohl die zeichenfolge für das array zu lang sein.
    ich habe bis zu 190 links a sagen wir 40 zeichen mindestens....
    noch wer abhilfe?
    ich weiss echt nicht wie ich das alleine schaffen soll und vielen vielen dank^^

  • Hi,

    mit den Timer-Funktionen könntest du noch die Maximalwartezeit von 10s bis Programmende verkürzen:

    Spoiler anzeigen
    [autoit]


    #include <IE.au3>

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

    HotKeySet("{ESC}", "_Exit")
    $bRun = True

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

    $oIE = _IECreate("link 1", 1)

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

    Local $aLinks[4] = ["LINK1", "LINK2", "LINK3", "LINK4"]

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

    $i = 0

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

    While $bRun
    $tTimer = TimerInit()
    _IENavigate($oIE, $aLinks[$i], 0)
    If $i = UBound($aLinks) - 1 Then
    $i = 0
    Else
    $i += 1
    EndIf
    While TimerDiff($tTimer) < 10000
    If $bRun = False Then ExitLoop
    WEnd
    WEnd

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

    MsgBox(64, "", "Schleife beendet!")

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

    Func _Exit()
    $bRun = False
    EndFunc ;==>_Exit

    [/autoit]

    Gruß stay


    Edit: Du könntest das Problem sauber über eine Ini-Datei lösen, aus der du die Links ausliest.
    Das Array wird auch so nicht zu groß werden:
    190 (Links) * 40 (Zeichen) * 2 (2 Byte pro Zeichen? Bin mir da unsicher... Char, Int? Oder wie viel bentötigt "var"?) = 15.2 kB...

    Einmal editiert, zuletzt von stayawayknight (10. Dezember 2012 um 21:06)

  • Vielleicht funktioniert das hier:

    [autoit]

    #include <IE.au3>

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

    HotKeySet("{F7}","_Exit")

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

    Global $i = 0

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

    While 1
    $oIE = _IECreate("link 1",1)
    Sleep(10000)
    $i += 1
    _IENavigate($oIE, "link2",0)
    sleep(10000)
    $i += 1
    _IENavigate($oIE, "link3",0)
    sleep(10000)
    $i += 1
    _IENavigate($oIE, "link4",0)
    sleep(10000)
    $i += 1
    WEnd

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

    Func _Exit()
    ConsoleWrite("Derzeitiger Link: " & $i)
    Exit
    EndFunc

    [/autoit]

    Ich garantiere für nichts :D
    Das ConsoleWrite kannst du ja mit einer MsgBox ersetzten.

    Mfg

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • huhu also die zeichenfolge ist definitiv zu lang.
    Wie funktioniert das mit einer ini?
    wäre es dann möglich das ganze übersichtlich zu gestalten?
    also z.b.
    link1
    link2
    link3
    usw.
    in diesem falle wäre es die beste lösung, da ich dann ohne probloeme einzelne entfernen kann und neue einsetzen.
    oder geht soetwas auch stupide mit einer txt?

    @stayawayknight
    ein timer ist nicht von nöten. ich passe die zeit gegebenenfalls selbst an diese soll aber auf keinen fall verkürzt werden. falls ich noch am lesen bin und der nach 3 sek umspringt is doof....

    @TheShadow ich muss schon aus der schleife herausspringen....
    einfach nur die anzahl wo ich beim derzeitigen abbruch gewesen bin ohne abbruch mh wie soll ich sagen bringt mir weniger^^
    das ganze script soll hierbei allerdings nicht unbedingt abgebrochen werden

    Einmal editiert, zuletzt von iceer (10. Dezember 2012 um 21:32)

  • Hi,

    entweder du nimmst eien Datei nach dem Ini-Format, oder einfach ein normales txt-File (letzteres ist hier vermutlich angebrachter).

    Auslesen kannst du das mit:

    [autoit]


    FileReadLine
    ;oder
    _FileReadToArray
    ;oder
    FileRead
    ;Anzahl der Zeilen:
    _FileCountLines

    [/autoit]

    Gruß stay

  • wohooo its easy i think but cant test at the moment with my links^^ but it seems to work^^

    [autoit]

    #include <IE.au3>

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

    HotKeySet("{ESC}", "_Exit")
    $bRun = True

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

    $oIE = _IECreate("LINK1", 1)

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

    $i = 1

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

    While $bRun = True
    $link = FileReadLine ( "links.txt" ,$i )
    _IENavigate($oIE,$link, 1)
    $i += 1
    Sleep(10000)
    WEnd

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

    MsgBox(64, "Linkzahkl: ", $i)

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

    Func _Exit()
    $bRun = False
    EndFunc ;==>_Exit

    [/autoit]

    Einmal editiert, zuletzt von iceer (10. Dezember 2012 um 22:20)

  • ähm ja äh
    Da ich es nicht wirklich testen kann:

    [autoit]

    if _FileCountLines($sFilePath)<$i then
    $bRun = False

    [/autoit]

    würde das funktionieren?

  • Nein. Damit beendest du die Schleife ja, wenn die Anzahl der Zeilen kleiner als $i ist. Das ist von Beginn an der Fall! Außerdem fehlt das "EndIf".

    In der verkürzten If-Schreibweise:

    [autoit]


    If _FileCountLines($sFilePath) > $i Then $bRun = False

    [/autoit]


    Kommt außerdem darauf an, an welcher Stelle das im Skript steht. Das obige müsste nach der Inkrementierung von $i im Programm stehen.

    Gruß stay

  • Hoppala ich dreh diese zeichen immer falsch rum....
    ich pack das einfach direkt nach das sleep(10000)
    zusammen mit der msgbox lasse ich dann einfach parallel inetexplorewr schliessen insofern i groß genug ist. ansonsten schliesst es ja auch wenn ich abbreche.
    Aber wirklich vielen vielen Dank. Ihr habt mir unglaublich viel geholfen