PixelgetColor funtzt nicht mehr

  • Hallo leute,
    Ich habe vor einiger Zeit angefangen mein neues AutoIT projekt zu machen.
    Dort ist auch eine pixelgetcolor funktion dabei.

    [autoit]

    func A()
    Send("{v}")
    Sleep(Random(200,250))
    $z = PixelGetColor(640,29)

    Switch $z

    Case 0x380808
    send("{g}")
    sleep(random(370,390))

    Case 0x847070
    send("{f}")
    sleep(random(370,390))

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

    Case 0xFFFFFF
    send("{k}")
    sleep(random(370,390))
    EndSwitch
    EndFunc

    [/autoit]

    So mein ganzes anderes Script funktioniert perfekt und sogar dieser teil aber nur manchmal.
    Denn in ein paar fällen überspringt der einfach die Farberkennung oder erkennt dort die Farbe nicht (was eigentlich nicht sein kann da die Farbe fest ist). Aufjedenfall macht der dann mit den Rest des Scriptes weiter. Was dann zu großen Problemen im Programm führt.
    Könnt ihr mir vielleicht sagen warum genau der manchmal einfach die Erkennung überspringt oder die Farbe dort nicht erkennt oder weiß der Geier was der da tut.

  • Und dann?
    Da ist Else total unangebracht.
    Er soll wenn einer der 3 hexcodes dort auftaucht soll er das auführen.
    Und dann weiter machen mit den Script.
    Und wenn es nicht auftaucht ist das schon ziemlich komisch. Da es immer da ist.

  • Wenn du raus bekommen willst warum der pixelgetcolor befehl nicht das zurück gibt was du willst dann würd ich ja erstmal schauen was der da so zurückgibt
    Case Else
    MsgBox(64, "Farbcode", "$z")

    da könnte es dir schon helfen ;)

  • öhm ok thx und sry.
    Ich bin nen bissl doof was muss ich da angeben damit der mir den farbcode ausgibt?
    So wie du es geschrieben hast funtzt es nicht.

  • Versuchs mal so :)

    Spoiler anzeigen
    [autoit]


    func A()
    Send("{v}")
    Sleep(Random(200,250))
    $z = PixelGetColor(640,29)
    $z = HEX($z, 6)

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

    Switch $z

    Case 380808
    send("{g}")
    sleep(random(370,390))

    Case 847070
    send("{f}")
    sleep(random(370,390))

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

    Case FFFFFF
    send("{k}")
    sleep(random(370,390))

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

    Case Else
    MsgBox(0, "", "Farbcode:" & $z)

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

    EndSwitch
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Öhm habe einfach mal das hier drangehängt.

    MsgBox(64, "Farbcode", $z )

    Und er hat mir den Farbcode 2563872 angegeben aber normalerweise sollte er bei Case 1 den Code 918532 angeben.


    Jetzt bin ich ja nur insofern weiter das ich weiß das er Manchmal an den Pixel ne Falsche farbe hat.
    Aber warum weiß ich leider nicht da er die Farbe eigentlich auf einen festen Image misst.

    Einmal editiert, zuletzt von Elite (22. Juli 2008 um 00:10)

  • benutz mal bitte so wie in meinem beispiel HEX($z, 6) um die dezimal zahl umzuwandeln.
    und wenn er dir dann den code ausspuckt den er mit pixelgetcolor gefunden hat schau mal nach welche farbe dahinter steckt und wo aufm bildschirm er die her geholt haben könnte.

  • Hmm er sacht mir folgenden Hexcode: 191F2A
    Jetzt weiß ich garnicht wie ich rausfinden soll welche Farbe das ist und wie ich die aufm Bild wiederfinden kann.

  • das is nen schwarz ton, check mal mit dem windows info tool noch mal ganz genau die coordinaten, die richtigen coords findest du im tab MOUSE!

  • versuch es mal damit die farb erkennung zu bestimmen wo er suchen soll aktive fenster usw.. denke mal da liegt der fehler

    3 Mal editiert, zuletzt von Mogash (22. Juli 2008 um 01:34)

  • Ich habe ganz sicher die Richtigen Coords eingegeben da ich das schon mehrmals überprüft habe.
    Und in 60% aller Fälle funtzt es ja auch was ja darauf schließen lässt das die Coords richtig sind.

  • AutoItSetOption ( "ColorMode", 1 ) AutoItSetOption ("PixelCoordMode", 0)


    Soll ich das direkt einfach so am Anfang meine Scripts tun?


    Edit: Also ich habe das jetzt mal genauso am Anfang meines Scripts getan aber es kommt immernoch.

  • Sorry erstmal für die ganzen Posts hintereinander.
    Also ich habe jetzt den Code von Mogash ausprobiert und muss leider sagen das es immer noch nicht klappt.
    Er gibt mir wieder einen Farbcode aus aber diesesmal 1975088
    Ich bin mitlerweile echt am verzweifeln.

  • Und der Code ist...
    1975088 -> Dezimalsystem
    im Hex: 0x1E2330
    und die Farbe:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    GUICreate("color")
    GUISetBkColor(1975088)
    $in = GUICtrlCreateInput("1975088",10,10,200,30)
    GUICtrlSetTip(-1,"Eingaben der Farbe in 3 Formaten:" & @CRLF & "Dezimal, z.B. 123456789" & @CRLF & "hex 1: 0xFFFFFF" & @CRLF & "Hex 2: AAAAAA")
    $out = GUICtrlCreateInput("",10,100)
    GUICtrlSetTip(-1,"Ausgabe, bei Dezimal in Hex, bei Hex in Dezimal")
    GUISetstate()
    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $in
    $x = GUICtrlRead($in)
    If StringIsDigit($x) Then
    GUISetBkColor($x)
    GUICtrlSetData($out,"0x" & Hex(Number($x),6))
    ElseIf StringIsXDigit($x) Then
    GUISetBkColor("0x"&$x)
    GUICtrlSetData($out,Dec($x))
    ElseIf StringLeft($x,2)="0x" And StringIsXDigit(StringTrimLeft($x,2)) Then
    GUISetBkColor($x)
    GUICtrlSetData($out, Dec(StringTrimLeft($x,2)))
    Else
    GUICtrlSetData($out,"No Color")
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von progandy (22. Juli 2008 um 21:07)

  • Öhm kannst du mir das bitte etwas genauer erklären?
    Ich verstehe gerade nur Bahnhof.

  • Ok ich weiß ja mitlerweile das er manchmal eine andere Farbe auswählt und auch welche Farbe das ist.
    Nun fragte ich mich ob es ein Befehl gibt womit ich die Farbe im offenen Fenster suchen lassen kann und die Maus dann dahin springt.
    Ich dachte das an PixelSearch aber irgendwie will der das damit nicht machen sondern spuckt mir eine Fehlermeldung aus das die Syntax wohl falsch ist.

  • Gut. Also PixelSearch:

    [autoit]

    PixelSearch ( left, top, right, bottom, color [, shade-variation [, step [, hwnd]]] )

    [/autoit]


    In deutsch in der deutschen Hilfe: Aktueller Stand 21.07.2008

    Spoiler anzeigen