Farbe+Koordinaten von Pixeln anderer Progs/Screens auslesen?

Anfängerfragen zum Programmieren mit PureBasic.
K.Putt
Beiträge: 122
Registriert: 01.09.2006 00:17

Farbe+Koordinaten von Pixeln anderer Progs/Screens auslesen?

Beitrag 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 :-)
PB 5.x & Win 7 64Bit
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Suchst du vielleicht GetPixel_()? Ich hoffe, das habe ich jetzt richtig geschrieben. Schau mal in der MSDN nach, wie das genau funktioniert.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
K.Putt
Beiträge: 122
Registriert: 01.09.2006 00:17

Beitrag 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 !!!
:-)
PB 5.x & Win 7 64Bit
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

18:31:45
...
18:32:25

*gg*
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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...
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag 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
Antworten