Pixelfind mit Wait

  • Hey, ich brauche eine Funktion, die erst dann weitermacht, wenn ein bestimmter Pixel gefunden ist. Da heute erster Mai ist, ist mein Kopf auch nicht so ganz denkklar ;)

    Dachte mir also:

    [autoit]

    $coord = 0
    While $coord = 0
    $coord = PixelSearch( 0, 0, @DesktopWidth, @DesktopHeight, 0x733D2C )
    WEnd

    [/autoit]

    Aber irgentwie is das quatsch, und funktioniert nicht.

    Einmal editiert, zuletzt von Ph1b (2. Mai 2009 um 19:53)

  • Versuch

    [autoit]

    Do
    Sleep(100)
    PixelSearch(...)
    Until @error=0

    [/autoit]
  • Hm, hab das jetz drin, und klappt vom Prinzip. Nur wie mache ich es, dass er nach 10 Sekunden nicht finden, die komplette Schleife neustartet?
    Hätt mir das so gedacht:

    [autoit]

    While True
    ...
    $exit=0
    Do
    Sleep(100)
    PixelSearch( 0, 0, @DesktopWidth, @DesktopHeight, 0x733D2C )
    $exit=$exit+1
    If $exit > 100 Then
    ContinueLoop
    EndIf
    Until not @error
    ...
    WEnd

    [/autoit]

    Nur durch das ContinueLoop starte ich ja nur die Schleife neu, davon hab ich allerdings nicht, ich muss die komplette Schleife neustarten.

  • Mein krankes Hirn hat sich das hier ausgedacht:

    [autoit]

    $exit = 0
    Do
    Sleep(100)
    PixelSearch( 0, 0, @DesktopWidth, @DesktopHeight, 0xFFFB00)
    $exit=$exit+1
    Until not @error or $exit > 100
    If $exit > 100 Then
    _shutdownFF()
    ContinueLoop
    EndIf

    [/autoit]

    Passt.

  • Mein krankes Hirn hat sich wiederum das ausgedacht:

    Spoiler anzeigen
    [autoit]

    AdlibEnable("_shutDownFF", 10000)

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

    While 1
    Sleep(100)
    PixelSearch( 0, 0, @DesktopWidth, @DesktopHeight, 0xFFFB00)
    Wend

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

    func _shutdownFF()
    MsgBox(0,"","",1)
    EndFunc

    [/autoit]

    Oder:

    Spoiler anzeigen
    [autoit]

    $time = TimerInit()
    $x = 1

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

    While 1
    Sleep(100)
    PixelSearch( 0, 0, @DesktopWidth, @DesktopHeight, 0xFFFB00)
    If Int(TimerDiff($time)/10000) = $x Then
    _shutDownFF()
    $x += 1
    EndIf
    Wend

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

    func _shutdownFF()
    MsgBox(0,"","",1)
    EndFunc

    [/autoit]

    Oder:

    Spoiler anzeigen
    [autoit]

    While 1
    $time = TimerInit()
    While 1
    Sleep(100)
    PixelSearch( 0, 0, @DesktopWidth, @DesktopHeight, 0xFFFB00)
    If TimerDiff($time) > 10000 Then
    _shutDownFF()
    ExitLoop
    EndIf
    Wend
    Wend

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

    func _shutdownFF()
    MsgBox(0,"","",1)
    EndFunc

    [/autoit]

    Du hast die freie Wahl ;)

    3 Mal editiert, zuletzt von ChaosKeks (2. Mai 2009 um 12:56)

  • Mach es doch noch einfacher:

    [autoit]


    While 1
    $timer = TimerInit()
    Do
    Sleep(10)
    PixelSearch( 0, 0, @DesktopWidth, @DesktopHeight, 0x733D2C )
    Until Not @error Or TimerDiff($timer) > 10000
    WEnd

    [/autoit]
  • Eh und jetzt fügst du noch seine Funktion _shutDownFF ein und das nach der Funktion der Timer neu gestartet werden soll und voilla bist du bei meiner Variante 3! ;)

    naja Oder so:

    Spoiler anzeigen
    [autoit]

    While 1
    $timer = TimerInit()
    Do
    Sleep(10)
    PixelSearch( 0, 0, @DesktopWidth, @DesktopHeight, 0x733D2C )
    Until Not @error Or TimerDiff($timer) > 10000
    _shutDownFF()
    WEnd

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

    Func _shutDownFF()
    MsgBox(0,"","",1)
    EndFunc

    [/autoit]

    Aber das ist auch nicht viel einfacher..

  • Genau. Und dann füg ich noch eine Variable ein, die zufällig eine unserer vielen Lösungen benutzt, damit wir alle gleich toll sind und heiraten können. Danke für die viele Hilfe ;)

  • Du willst heiraten, wenn du eine Funktion fertig hast... was machstu wenn das ganze Script fertig ist? :D

  • Wie mach ichn das eigentlich mit _Imagesearch?

    Da hängt sich mein Script dann immer auf...