Thema: Delphi Problem mit RGB-Suchtool

Einzelnen Beitrag anzeigen

Benutzerbild von rhodan
rhodan

Registriert seit: 4. Okt 2005
Ort: Hamburg
150 Beiträge
 
Delphi 7 Personal
 
#1

Problem mit RGB-Suchtool

  Alt 5. Mär 2008, 18:48
Abend Community

Ich bin gerade etwas verwirrt.
Folgender Code sollte eigentlich auf Knopfdruck den unter findwindow angegebenen Fenstertitel in den Vordergrund holen und ihn nach RGB Werten die ich unter 'public' vorher deklariert habe absuchen.
Wird das Programm fündig erscheint ein Button auf dem 'Gefunden!' steht.

Seltsam ist nur: wenn ich z.B Windows Pinball auf diese weise absuche scheint er JEDEN RGB Wert den ich vorher festlege in dem Spiel zu finden (selbst wenn diese Farbe gar nicht vorkommt).
Erschaffe ich allerdings ein eigenes Projekt mit schwarzem Hintergrund und einem roten Panel darauf, scheint er nicht mal das Rot dort zu finden (die genauen RGB Werte hab ich mir mit Photoshop angeguckt)

Wäre jemand vielleicht so freundlich einen kurzen blick auf den code zu werfen bzw. einen kurzen Test zu machen und mir zu sagen ob ich Müll geschrieben hab oder nicht? Ich traue den Ergebnissen nicht mehr ^^.
(auf dem formular sind nur 2 buttons wobei button1 auf visible:=false steht).

Delphi-Quellcode:
  public
pixel_R: 150..150;
pixel_G: 4..4;      //RGB Werte nach denen unten mit 'getRvalue' etc. gesucht werden soll
pixel_B: 30..30;
width, height:integer;
posx,posy:integer;
x,y : integer;
  end;

procedure TForm1.Button2Click(Sender: TObject);
var
game_hwnd : hwnd;
dc : hdc;
pixel:colorref;
get_dc:integer;
prect:Trect;
begin
game_hwnd := findwindow(nil,'3D-Pinball für Windows - Space Cadet');
showwindow (game_hwnd, sw_restore);
setforegroundwindow(game_hwnd);
setfocus;

getwindowrect(game_hwnd,prect);   // Rechteck wird gezeichnet in dem nach RGB Werten gesucht werden soll.
width:=prect.right-prect.left;
height:=prect.Bottom-prect.Top;
posx:=prect.left;
posy:=prect.Top;

dc:=getdc(game_hwnd);
pixel:=getpixel(dc,x,y);

if
(getRvalue(pixel)=pixel_R) and
(getGvalue(pixel)=pixel_G) and      //Pixel werden auf die oben in 'Public' angegebenen RGB werte kontrolliert..
(getBvalue(pixel)=pixel_B) then
begin
button1.Visible:=true;      
end;
end;

end.
Bzw. wäre es auch möglich die Koordinaten des gefundenen Pixels anstatt des 'Gefunden!' in der Caption von Button1 erscheinen zu lassen?

Vielen lieben dank & schönen Abend

gruß rhodan
  Mit Zitat antworten Zitat