Starthilfe Pixelgetcolor

  • Hay,
    ich hab vor ein kleines programm zu schreiben was an einer position den farbton des pixels aufnimmt und speichert (Pixelgetcolor)
    und sobald sich dieser farbton des selben pixels ändert eine aktion ausführt.

    mein anfang sah erst so aus

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

    $farbe = PixelGetColor (@desktopwidth/2, @DesktopHeight/2)
    $andere = Pixelgetcolor (@DesktopWidth/2, @DesktopHeight/2)

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

    if $farbe <> $andere Then
    MsgBox(0,"hi","hi")
    EndIf

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

    while 1 ;endlosschleife
    sleep (100)
    WEnd

    [/autoit]

    dann fiel mir ein... was bringts mir 2ma den punkt festzulegen wenn er den zur selben zeit scannt..
    so meine frage jetzt
    kann mir irgendwer ne starthilfe geben oder beschreiben wie ich das am besten realisiere?

    Einmal editiert, zuletzt von pudelbear (15. Juni 2012 um 21:06)

  • [autoit]

    Global $i_CoordX = @DesktopWidth / 2
    Global $i_CoordY = @DesktopHeight / 2 ; Legst die Koordinaten fest
    Global $i_Color = PixelGetColor ($i_CoordX, $i_CoordY) ; Speicherst die derzeitige Farbe

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

    Do
    Sleep (250)
    Until $i_Color <> PixelGetColor ($i_CoordX, $i_CoordY) ; Wartest, bis sich die Farbe ändert

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

    _MeineFunktion () ; Rufst hier die gewünschte Funktion auf

    [/autoit]
  • moin

    solte so klappen

    Spoiler anzeigen
    [autoit]

    $check = PixelChecksum(@DesktopWidth/2, @DesktopHeight/2, @DesktopWidth/2, @DesktopHeight/2)

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

    while 1 ;endlosschleife
    If $check <> PixelChecksum(@DesktopWidth/2, @DesktopHeight/2, @DesktopWidth/2, @DesktopHeight/2) Then ;vergleicht ob es eine änderung gab
    ToolTip("Änderung aufgetreten") ;tolltip statt msgbox weil die msgbox in der mitte des bildschirms auftaucht und es damit wieder eine änderung der pixel gibt
    Sleep(3000)
    ToolTip("")
    ;MsgBox(0,"hi","hi")
    EndIf
    sleep (100)
    WEnd

    [/autoit]
  • Danke für die hilfe,
    ich hab jetzt 2 Versuche gestartet:
    1.

    [autoit]

    #include "misc.au3"

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

    Global $i_CoordX = @DesktopWidth / 2
    Global $i_CoordY = @DesktopHeight / 2 ; Legst die Koordinaten fest
    Global $i_Color = PixelGetColor ($i_CoordX, $i_CoordY) ; Speicherst die derzeitige Farbe

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

    while 1
    sleep (50)
    WEnd

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

    While _ispressed ("04")
    Do
    Sleep (5)
    Until $i_Color <> PixelGetColor ($i_CoordX, $i_CoordY) ; Wartest, bis sich die Farbe ändert
    WEnd

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

    mouseclick ("left")

    [/autoit]

    2.

    [autoit]

    #include "misc.au3"

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

    $check = PixelChecksum(@DesktopWidth/2, @DesktopHeight/2, @DesktopWidth/2, @DesktopHeight/2)

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

    while 1 ;endlosschleife
    sleep (100)
    WEnd

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

    While _ispressed ("04")
    sleep (8)
    If $check <> PixelChecksum(@DesktopWidth/2, @DesktopHeight/2, @DesktopWidth/2, @DesktopHeight/2) Then ;vergleicht ob es eine änderung gab
    ToolTip("Änderung aufgetreten") ;tolltip statt msgbox weil die msgbox in der mitte des bildschirms auftaucht und es damit wieder eine änderung der pixel gibt
    Sleep(30)
    ToolTip("")
    ;MsgBox(0,"hi","hi")
    EndIf
    WEnd

    [/autoit]

    Bei beiden funktioniert es nicht.
    Wäre über jede hilfe dankbar
    mfg. kim

  • Im zweiten Beispiel ist es schon richtig kommentiert... Das Script hängt in einer Endlosschleife. Deine Funktion wird also gar nicht abgearbeitet. :P
    Etwa so sollte es aussehen:

    Spoiler anzeigen
    [autoit]

    #include "misc.au3"

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

    Global $i_CoordX = @DesktopWidth / 2
    Global $i_CoordY = @DesktopHeight / 2 ; Legst die Koordinaten fest
    Global $i_Color = PixelGetColor ($i_CoordX, $i_CoordY) ; Speicherst die derzeitige Farbe

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

    Do
    Sleep (100)
    Until _IsPressed ("04") ; Wartet, bis "04" gedrückt wird

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

    While _ispressed ("04")
    If $i_Color <> PixelGetColor ($i_CoordX, $i_CoordY) Then ExitLoop ; Wartest, bis sich die Farbe ändert
    Sleep (100)
    WEnd

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

    mouseclick ("left")

    [/autoit]
  • Danke für die Hilfe, jetzt versteh ich was ich die ganze zeit falsch gemacht hab.
    Allerdings ist ja das Script jetzt endlich, soll allerdings unendlich sein und immerwieder checken ob der Pixel sich dann ändert.
    sprich sobald das script einmal durchlief soll es nochmal durchlaufen
    Warscheinlich ist es total einfach und ich komm nicht drauf, wenn ja tut mir leid, bin erst am Anfang des lernens.

    Ich wollt schon wieder die While 1 sleep endlosschleife einbauen nur dann würde ja die funktion wieder nicht abgearbeitet werden.
    Mfg. Kim

    Edit: ich merke gerade er den pixel nicht beim drücken der taste sondern direkt beim programmstart aufnimmt, wär das änderbar?

    3 Mal editiert, zuletzt von pudelbear (15. Juni 2012 um 14:25)

  • moin,

    meinst du so?

    [autoit]

    #include "misc.au3"

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

    Global $i_CoordX = @DesktopWidth / 2
    Global $i_CoordY = @DesktopHeight / 2 ; Legst die Koordinaten fest

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

    While 1
    Sleep(100)
    If _IsPressed("4") Then
    While 1
    $i_Color = PixelGetColor ($i_CoordX, $i_CoordY) ; Speicherst die derzeitige Farbe
    If $i_Color <> PixelGetColor ($i_CoordX, $i_CoordY) Then
    mouseclick ("left")
    ExitLoop
    EndIf
    WEnd
    EndIf
    WEnd

    [/autoit]