![]() |
Welche Farbe hat der Pixel?
Also liebe Programmierer
Stehe vor einem Problem :) Ich habe ein Program geöffnet und möchte überprüfen oder der Pixel x,y die Farbe 000000 hat oder gleich dem pixel ist aus einem screenshot. Falls das der Fall ist soll ein Tastendruck simuliert bzw mehrere hintereinander(esc+pfeilhoch+enter) werden. Mein Problem ist es nun ich möchte nicht 10k screenshots machen da das zu lange dauert und recourcenfressen ist wie ihr euch sicherlich denken könnt, sonder halt nur 1-10 pixel überprüfen, das aber jede Sekunde oder noch schneller wenn es geht. Mein Programm läuft im Hintergrund ist also nicht aktiv (ich weiß nich ob das relevant ist, denke aber schon). Tastendruck simulieren hab ich schon nach gesucht und das dürfte kein Problem sein aber das mit dem überprüfen hab ich nirgens gefunden. In Delphi natürlich :D Hoffe auf eure Hilfe! |
Re: Welche Farbe hat der Pixel?
Schau doch mal im Delphi Menü -> Hilfe -> Windows-SDK
Und im Index suchen nach diesen Funktionen: GetDesktopWindow -> Window-Handle des gesamten Bildschirms holen GetDC -> Device Context für ein Window-Handle holen. GetPixel -> Pixelfarbe eines bestimmten Bildpunktes Zusammen sollte es dann in etwa so aussehen:
Delphi-Quellcode:
Hab aber nicht getestet ob es wirklich funktioniert.
var
hdcDesktop : HDC; crefPixel : COLORREF; begin hdcDesktop := GetDC(GetDesktopWindow); crefPixel := GetPixel(hdcDesktop, 50, 50); ... ReleaseDC(GetDesktopWindow, hdcDesktop); end; |
Re: Welche Farbe hat der Pixel?
Also ich bin nicht so gut in Delphi also immer schön langsam :D
Erstmal danke für deine Hilfe aber hier eine kleine Prüfprozedur die mir immer wiederdas selbe ergenis leifert :(
Delphi-Quellcode:
4294967295 ist das ergnis :)
procedure TForm1.Button1Click(Sender: TObject);
var hdcDesktop : HDC; crefPixel : COLORREF; begin randomize; hdcDesktop := GetDC(GetDesktopWindow); crefPixel := GetPixel(hdcDesktop, random(500), random(500)); Label1.caption:=inttostr(crefpixel); ReleaseDC(GetDesktopWindow, hdcDesktop); end; Und ich hab keine Ahnung was mir das sagt XD |
Re: Welche Farbe hat der Pixel?
Also ich wusste gar nicht dass es COLORREF gibt. Hätte TColor oder Cardinal benutzt.
Ausserdem: Anstatt GetDesktopWindow einfach ne 0 schreiben, kommt aufs Selbe raus. Gibt GetDesktopWindow auch einfach nur 0 zurück? Wenn ja, isses die überflüssigste Funktion aller Zeiten :lol: Edit: Randomize nur im OnCreate-Ereignis schreiben, nicht mehrmals aufrufen. |
Re: Welche Farbe hat der Pixel?
Zitat:
|
Re: Welche Farbe hat der Pixel?
tjo das bringt mich ja jetzt so null weiter ne ^^
|
Re: Welche Farbe hat der Pixel?
|
Re: Welche Farbe hat der Pixel?
Hallo!
Also der Wert lässt sich ganz einfach erklären: Zitat:
Allerdings liegt der Wert doch mit max 500 in dem Bereich der angezeigt wird! :gruebel: Gruß MasterDG |
Re: Welche Farbe hat der Pixel?
Sorry ^^ aber ich hab das auch nur auf die schnelle zusammengestrickt.
Als Entschädigung hier der richtige Code:
Delphi-Quellcode:
Allerdings schreibt
// Form1 enthält
// 1 TTimer Objekt, Intervall = 100 // 1 TEdit namens Koord // 1 TEdit namens Color // die OnTimer Prozedur des Timers sieht so aus: procedure TForm1.Timer1Timer(Sender: TObject); var hDesk : HWND; hdcDesktop : HDC; crefPixel : COLORREF; p : TPoint; begin GetCursorPos(p); Koord.Text := 'X = ' + inttostr(p.x) + ' Y = ' + inttostr(p.y); hDesk := GetDesktopWindow; hdcDesktop := GetWindowDC(hDesk); crefPixel := GetPixel(hdcDesktop, p.x, p.y); color.Text := inttostr(crefPixel); ReleaseDC(hDesk, hdcDesktop); end; ![]() Hab das mal kurz getestet mit dem Task-Manager. Am Anfang braucht mein Programm 2004 kB Speicher, das wird dann auch tatsächlich immer mehr... immer wenn ich mit der Maus über ein "neues" Fenster drüberfahre (wo die Maus vorher noch nicht war) wird es mehr. Nach einiger Zeit sind es dann 2388 KB Speicher. |
Re: Welche Farbe hat der Pixel?
Wow du hast mir echt weitergeholfen!
Selbst bei einem Timerintervall von 1 kommen ei mir keine Speicherprobleme auf. Vielen Dank der Quelltext über mir funktioniert einwandfrei! ----------------- Suchbegriffe: Pixelfarbe Pixel Farbe GetWindowDC GetPixelb |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:42 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 by Thomas Breitkreuz