Farbe+Koordinaten von Pixeln anderer Progs/Screens auslesen?
Vernünftige Haltung! Ich lege es natürlich auf nicht darauf an, bin froh, den Link erhalten zu haben. Download uns Installation verliefen erfolgreich, werde es gleich sofort testen.
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
Ich habe mir eine Funktion geschrieben die in einem Fenster die Koordinaten eines Pixels mit bestimmter Farbe finden soll
Jedoch gibt er mir immer FFFFFF als Color zurück...
Sieht jemand den Fehler?
EDIT:
Habe den Fehler selbst gefunden..
Das Fenster war nicht im Vordergrund ^^
Deshalb sieht mein Code nun so aus:
Aber er gibt mir meistens -1 (als Hex= FFFFFFF) zurück 
Code: Alles auswählen
Procedure FindPixel(WindowName.s,x1,y1,x2,y2,colour)
WindowID = FindWindow_(0, WindowName)
For a=x1 To x2
For b=y1 To y2
Color=GetPixel_(GetDC_(WindowID),a,b)
Debug Hex(Color)
If Color=Colour
Debug Str(x1)+" "+Str(x2)
EndIf
Next
Next
EndProcedure
Sieht jemand den Fehler?

EDIT:
Habe den Fehler selbst gefunden..
Das Fenster war nicht im Vordergrund ^^
Deshalb sieht mein Code nun so aus:
Code: Alles auswählen
Global WindowID
Procedure FindPixel(WindowName.s,x1,y1,x2,y2,colour.s)
WindowID = FindWindow_(0, WindowName)
If WindowID=0:End:EndIf
Repeat:Delay(1):Until GetForegroundWindow_()=WindowID
Delay(1000)
For a=x1 To x2
For b=y1 To y2
Color=GetPixel_(GetDC_(WindowID),a,b)
;Debug "x: "+Str(a)+" y: "+Str(b)+" Color: "+Hex(Color)
If Hex(Color)=Colour
Debug Str(x1)+" "+Str(x2)
EndIf
Next
Next
EndProcedure
;z.b.
FindPixel("LOL - Nachrichtensitzung",1,1,50,50,"FFFF00")

also das geht: [aber es wird immer die farbe des windows-standard-grau ausgegeben - frag mich nich wieso, mit solchen DCs kenn ich mich nich aus]
übrigens bei deinem..hab ich mal sinnvollerweise a und b genommen 
Code: Alles auswählen
OpenWindow(0, 100,400,100,100,"lala")
Procedure FindPixel(WindowName.s,x1,y1,x2,y2,Colour)
WindowID = FindWindow_(0, WindowName)
For a=x1 To x2
For b=y1 To y2
Color=GetPixel_(GetDC_(WindowID),a,b)
Debug Str(a)+","+Str(b)+" "+Str( Red(color) )+", "+Str( Green(color) )+", "+Str( Blue(color) )+" $"+Hex(color)
If Color=Colour
Debug " aha !! @"+Str(a)+" "+Str(b)
EndIf
Next
Next
EndProcedure
FindPixel("lala", 50,50, 51,50, RGB(224,223,227) )
Repeat :: Until WindowEvent()=#PB_Event_CloseWindow
übrigens bei deinem..
Code: Alles auswählen
If Hex(Color)=Colour
Debug Str(x1)+" "+Str(x2)
EndIf
