Seite 1 von 2

Farbe+Koordinaten von Pixeln anderer Progs/Screens auslesen?

Verfasst: 14.09.2006 17:58
von K.Putt
Hallo,
ich würde gern in anderen Screens(Fullscreen) nach Pixeln
bestimmter Farbe suchen und mir die Koordinaten ausgeben lassen.

Ich weiss nicht wie man das lösen kann, entweder Suchen bei der Anwendung, die "on Top" (Screen) läuft oder aufgrund des .exe Names ?

Hat jemand etwas ähnliches schon mal ausprobiert, vielleicht auch in einem ganz anderen Zusammenhang ?

Ich würde daraus gern so ein Color Choosing Tool machen, es gab da so etwas kleines, dass ich früher immer bei der HTML Programmierung benutzt habe, damit konnte man auf einem beliebigen Bereich des Screens gehen und es wurde der Farbwert des Pixels angezeigt,
allerdings hab ich dass nur in Windowed-Screens gemacht.

Mein Tool soll dann zusätzlich auf dem Bildschirn nach bestimmten Farben suchen, also unabhängig davon, wo die Maus gerade ist.

Eventuell über Screenshot Funktionen, die Farbwerte analysieren und dann ausgeben ? Gibt es andere Möglichkeiten ?

Bin für jeden Tip dankbar, der mich etwas in die richtige Richtung bringt :-)

Verfasst: 14.09.2006 18:05
von AND51
Suchst du vielleicht GetPixel_()? Ich hoffe, das habe ich jetzt richtig geschrieben. Schau mal in der MSDN nach, wie das genau funktioniert.

Verfasst: 14.09.2006 18:10
von Kaeru Gaman
oder tipps in der PB-IDE ein, und drück F1 (wenn du die win32.hlp hast)
The GetPixel function retrieves the red, green, blue (RGB) color value of the pixel at the specified coordinates.

COLORREF GetPixel(

HDC hdc, // handle of device context
int XPos, // x-coordinate of pixel
int nYPos // y-coordinate of pixel
);
Parameters

hdc

Identifies the device context.

nXPos

Specifies the logical x-coordinate of the pixel to be examined.

nYPos

Specifies the logical y-coordinate of the pixel to be examined.

Return Values

If the function succeeds, the return value is an RGB value. If the pixel is outside of the current clipping region, the return value is CLR_INVALID.

Remarks

The pixel must be within the boundaries of the current clipping region.
Not all devices support GetPixel. An application should call GetDeviceCaps to determine whether a specified device supports this function.

Verfasst: 14.09.2006 18:12
von AND51
Aha, hatte ich also doch Recht.

@ Kaeru: Kannst du mir vielleicht den Link geben, wo es die Win32.hlp gibt? Ich will auch kontextsensitive API Hilfe :allright:

Verfasst: 14.09.2006 18:22
von Kaeru Gaman
[18:28] <Kaeru> sagt mal leute
[18:28] <Kaeru> hatte mir nicht hier im channel jemand den link für die win32.hlp gegeben?
[18:31] <DarkDragon> kann ich machen
[18:31] <Kaeru> AND hatte im forum angefragt... aber ich hab den link nimmer
[18:31] <DarkDragon> http://www.purebasic.de/files/win32.zip
[18:31] <DarkDragon> jo der soll im FAQ schauen
[18:31] <DarkDragon> da stehts
[18:31] <DarkDragon> groß und deutlich
[18:32] <DarkDragon> http://www.purebasic.fr/german/viewtopic.php?t=14
[18:32] <DarkDragon> hat mich keine minute gekostet jetzt

Verfasst: 14.09.2006 19:27
von K.Putt
Hallo und vielen dank erstmal :-)

_GetPixel funktioniert wunderbar für jede Desktop oder Windowed-Anwendung,
leider bekomme ich es nicht hin die Pixel bei einer Full-Screen
Anwendung auszulesen.


Momentaner Stand ist :

Pixelfarbe=GetPixel_(GetDC_(GetForegroundWindow_()), maus_x, maus_y)

es gibt noch die Möglichkeit, über die ID zu gehen :
Pixelfarbe=GetPixel_(GetDC_(ID(???)),maus_x,maus_y)

Allerdings weiss ich nicht, wie ich die Window/Screen ID einer anderen Anwendung bekomme...

Ich habe die Funktion _FindWindow(lpClassName,lpWindowName) gefunden, mit der man nach dem Titel des Windows suchen kann und dann die ID zurückgibt, ich verstehe nur nicht, was ich als Klassenname eingeben soll ?


EDIT :

Ich habe die Lösung, funktioniert:

Code: Alles auswählen

WindowID = FindWindow_(#Null, "Fenstertitel") 
;Fenstertitel muss exakt matchen
If WindowID = 0 
Debug "Window not Exists"
EndIf
Debug WindowID

So bekommt man dann die Werte (Funktioniert auch bei Fullscreen-Anwendungen), allerdings nur innerhalb der angegebenen WindowID :

Code: Alles auswählen

Pixelfarbe=GetPixel_(GetDC_(WindowID),Maus_X, Maus_Y)

Danke für den richtigen Anstoss, Super !!!
:-)

Verfasst: 14.09.2006 20:12
von AND51
[18:31] <DarkDragon> [...]
.
.
.
[18:32] <DarkDragon> hat mich keine minute gekostet jetzt
Und das soll ich glauben? :lol:


Im ernst: Trotzdem danke an euch! :allright:

Verfasst: 14.09.2006 20:16
von a14xerus
18:31:45
...
18:32:25

*gg*

Verfasst: 14.09.2006 20:20
von AND51
a14xerus hat geschrieben:18:31:45
...
18:32:25

*gg*
Woher weißt du das denn so genau? Warst du etwa dabei? :wink: Außerdem sehe ich da keine Sekunden-angaben...

Verfasst: 14.09.2006 20:23
von a14xerus
war doch nur eine vermutung.. vll hat er auch mehr als eine minute gebracuth ( von 18:31:01 bis 18:32:59). aber das is ja schnurz.. ich zieh mich hier wieder zurück, weil ich keine [ot] schlacht veranstallten will