Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Pixelfarbe aus anderem Programm auslesen (https://www.delphipraxis.net/87895-pixelfarbe-aus-anderem-programm-auslesen.html)

carknue 6. Mär 2007 23:09


Pixelfarbe aus anderem Programm auslesen
 
Wie kann man aus einem anderen Programm die Farbe eines Pixels seiner Oberfläche auslesen. Hintergrund ist, das andere Programm hat eine Statusanzeige, welche rot oder grün ist und ich möchte gerne protokollieren, wann und wie oft sie grün oder rot ist.

bitsetter 6. Mär 2007 23:21

Re: Pixelfarbe aus anderem Programm auslesen
 
Hallo,

ich glaube du meinst sowas hier:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  CurPos: TPoint;
  lDC: HDC;
begin
  //sleep(2000);
  lDC:= GetDC(0);
  if lDC> 0 then
  try
    GetCursorPos(CurPos);//Beispiel
    Color:= GetPixel(lDC, CurPos.X, CurPos.Y);
  finally
    ReleaseDC(0, lDC);
  end;
end;

carknue 7. Mär 2007 21:58

Re: Pixelfarbe aus anderem Programm auslesen
 
Zitat:

Zitat von bitsetter

ich glaube du meinst sowas hier:

Ja, aber wie stelle ich den Pixel fest auf eine bestimmte koordinate in der anderen Anwendung. Ich will da nicht mit der Maus draufzeigen müßen. Muß das andere Programm dazu zwingend im Vordergrund sein oder ginge es auch, wenn andere Fenster darüber wären? In den Vordergrund könnte ich es ja noch z.B mit sendkeys holen aber wie lege ich fest, dass immer der Pixel 100,120 in der anderen Anwendung kontrolliert wird, egal wo diese Anwendung auf dem Bildschirm ist.

bitsetter 7. Mär 2007 22:13

Re: Pixelfarbe aus anderem Programm auslesen
 
Hi,

wenn du das Handle des Fensters kennst, dann geht es auch so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  CurPos: TPoint;
  lDC: HDC;
  h: HWND;
begin
  h:= findwindow();//oder auch was anderes
  SetForegroundWindow(h);
  lDC:= GetDC(h);
  if lDC> 0 then
  try
    Color:= GetPixel(lDC, 100, 120);
  finally
    ReleaseDC(h, lDC);
  end;
end;
Oder du musst das Handle mit EnumWindows herausfinden.
EDIT: Ich glaube das Fenster muss sich trotzdem im Vordergrund befinden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz