Seite 2 von 2

Verfasst: 14.09.2006 21:05
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.

Verfasst: 21.10.2006 22:10
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 :(

Verfasst: 21.10.2006 22:55
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

Verfasst: 21.10.2006 22:59
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 ^^

Verfasst: 21.10.2006 23:41
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: