Farbe+Koordinaten von Pixeln anderer Progs/Screens auslesen?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

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
mongolo89
Beiträge: 22
Registriert: 05.04.2006 13:28

Beitrag von mongolo89 »

Ich habe mir eine Funktion geschrieben die in einem Fenster die Koordinaten eines Pixels mit bestimmter Farbe finden soll

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
Jedoch gibt er mir immer FFFFFF als Color zurück...
Sieht jemand den Fehler? :cry:

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")
Aber er gibt mir meistens -1 (als Hex= FFFFFFF) zurück :(
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

GetPixel:
If the pixel is outside of the current clipping region, the return value is CLR_INVALID
und Hex(#CLR_INVALID) ist FFFFFFFF
my pb stuff..
Bild..jedenfalls war das mal so.
mongolo89
Beiträge: 22
Registriert: 05.04.2006 13:28

Beitrag von mongolo89 »

#NULL hat geschrieben:GetPixel:
If the pixel is outside of the current clipping region, the return value is CLR_INVALID
und Hex(#CLR_INVALID) ist FFFFFFFF
Ja aber das komische ist ja das es nicht außerhalb ist :roll:
irgendwas muss falsch sein an dem code ^^
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

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]

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 
hab ich mal sinnvollerweise a und b genommen :wink:
my pb stuff..
Bild..jedenfalls war das mal so.
Antworten