![]() |
Pixel aus aktivem Fenster lesen...
Hallo,
ich brauch einen quellcode um aus einem aktiven Fenster die Pixel rauslesen zu können und dann daraufhin eine Taste zu drücken. Also am Ende will ich eine bestimmte Taste gedrückt haben, wenn da was Gelbes oder Grünes auf dem Bild ist. Ich hatte daran gedacht einfach einen Screen zu machen und den in Delphi zu laden und dort dann an betimmten positionen die pixel zu suchen....das ganze sollte jedoch relativ schnell gehen...hat jemand ne idee? vllt. kann man ja auch direkt aus dem aktiven Fenster die Pixel "testen"...ich weiß aber nicht wie... FaFu :?: |
Re: Pixel aus aktivem Fenster lesen...
1. Hole Handle vom aktiven Fenster
2. Hole per GetDC den Device Handle 3. Erstelle eine Bitmap und kopiere den Inhalt des Device Handles auf die Bitmap per BitBlt 4. Nun kannst du in der Bitmap die Pixel auslesen (Pixels[]/per Scanline)...
Delphi-Quellcode:
MfG ;)
//Beispiel
variablen: hWnd, DC vom Typ Cardinal, Rect vom Typ TRect, Bmp vom Typ TBitmap; // Inhalt von Notepad wird ausgelesen: hWnd := FindWindow('Notepad',nil); GetWIndowRect( hWnd, Rect ); DC := GetDC( hWnd ); Bmp := TBitmap.Create; Bmp.Width := Rect.Right-Rect.Left; Bmp.Height := Rect.Bottom-Rect.Top; BitBlt( Bmp.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, DC, 0, 0, SRCCOPY ); Canvas.Draw( 8, 8, Bmp ); |
Re: Pixel aus aktivem Fenster lesen...
Okay...ich probiers mal! Danke!
|
Re: Pixel aus aktivem Fenster lesen...
Ich hatte davor das
Delphi-Quellcode:
und jetzt nach dem anderen Vorschlag das:
var
Bmp: TBitmap; color1:Tcolor; R,G,B: Integer; begin Bmp := TBitmap.Create; try FormularScreenShot(Bmp, GetDesktopWindow); Canvas.Draw(0, 0, Bmp);
Delphi-Quellcode:
Welches ist schneller und belastet somit weniger den prozessor?
var
hWnd, DC: Cardinal; Rect: TRect; Bmp :TBitmap; begin try hWnd := GetDesktopWindow; GetWindowRect( hWnd, Rect ); DC := GetDC( hWnd ); Bmp := TBitmap.Create; Bmp.Width := Rect.Right-Rect.Left; Bmp.Height := Rect.Bottom-Rect.Top; BitBlt( Bmp.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, DC, 0, 0, SRCCOPY ); Canvas.Draw( 0, 0, Bmp ); finally Bmp.Free; mfG |
Re: Pixel aus aktivem Fenster lesen...
Es ist nicht gerade wahnsinnig klug, das Fenster zunächst in das Hintergrund-Bitmap und dieses dann auf das Formular zu kopieren.
|
Re: Pixel aus aktivem Fenster lesen...
Soll heißen...?
Gibt es eigentlich auch die Möglichkeit direkt aus dem Fenster bestimmte Farben zu erkennen ohne dieses erst in ein Bmp umzuwandeln? Sozusagen Canvas.Pixels für das aktive Fenster?... mfG |
Re: Pixel aus aktivem Fenster lesen...
Im unteren Codeschnipsel kopierst du das Bild zweimal. Wenn dich nur einzelne Pixel interessieren, kannst du dir eine neue Instanz von TCanvas erzeugen, den Device Context zuweisen und dann munter sämtliche Methoden und Eigenschaften eines Canvas nutzen.
|
Re: Pixel aus aktivem Fenster lesen...
Das mit dem "aufs Formular" zeichnen dient nur dazu, dass er sieht, dass es aufgenommen wurde ..
Nur DeviceContext zu ermitteln reicht in deinem Fall auch, falls du schon weißt, wo sich deine Pixel genau befinden und du nicht zuerst kucken musst. Siehe dazu GetPixel() / SetPixel() MfG |
Re: Pixel aus aktivem Fenster lesen...
Sagen wir ich will den Farbwert von dem Pixel auf der Position 550,530 wissen auf dem aktiven Fenster...
Delphi-Quellcode:
Welcher Parameter fehlt bei dem '?' ?...
var
color2: TColor; R,G,B: Integer; begin color2 := GetPixel(?,550,530); R := GetRValue(GetPixel(550,530)); G := GetGValue(GetPixel(550,530)); B := GetBValue(GetPixel(550,530)); mfG |
Re: Pixel aus aktivem Fenster lesen...
Kennst du die F1-Taste?
|
Re: Pixel aus aktivem Fenster lesen...
Ich will zwar kein Spielverderber sein (vielleicht auch doch), aber Du hast nicht zufällig vor einen Bot zu programmieren?
Bei DirectX wir deine Methode aber vermutlich ncht funktionieren... |
Re: Pixel aus aktivem Fenster lesen...
Funktioniert das Ganze so richtig? oder hab ich da was falsch gemacht ?
Delphi-Quellcode:
var
DC, hWnd: Cardinal; begin Enter := false; hWnd := GetDesktopWindow; DC := GetDC( hWnd ); color1 := GetPixel(DC,550,515); R := GetRValue(color1); G := GetGValue(color1); B := GetBValue(color1); |
Re: Pixel aus aktivem Fenster lesen...
Irgendwie kommen da bei mir immer dieselben Farbwerte raus...egal welche Farbe an dem Punkt 550/515 ist...
|
Re: Pixel aus aktivem Fenster lesen...
Und deshalb wirfst du geich die Flinte ins Korn?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz