Seite 1 von 2

Farbe eines Fensterhintergrund in RGB ermitteln.

Verfasst: 14.11.2025 12:37
von MacThommes
Ja, da bin ich wieder....
Ich versuche gerade heraus zu bekommen, wie ich eine Farbe (RGB-Wert) eines Fensters heraus bekomme.
Das Problem:
Wenn ich ein Programm starte und sich dort ein Fenster öffnet, hat dies eine bestimmte Hintergrundfarbe.
Z.B. wenn ich den "Darkmodus" im System einstelle, werden die Programme alle einen dunklen Hintergrund haben. Wenn ic diesen Darkmodus nicht eingestellt habe, ist der Hintergrund der Fenster hell.
Gibt es eine Möglichkeit, den RGB-Wert eines aktuellen Fensters zu ermitteln?
Ich such mir hier einen Wolf, finde aber nichts passendes.
Ich benötige das um - wenn ich in dieses Fenster mittels ImageGadget etc. etwas zeichnen will (Ja, dank der hilfe hier geht das :allright: ), muss ich teilweise mit der selben Farbe zeichnen, wie die Farbe des Hintergrundes.
Ich hoffe, ich hab das Problem gut schildern können.
Ich sag schon mal danke für die über 1000 passenden Antworten. :wink:

Re: Farbe eines Fensterhintergrund in RGB ermitteln.

Verfasst: 14.11.2025 14:41
von SMaag
ungetestet mit WinAPi

Code: Alles auswählen

hWnd = WindowID(#Window) ; #Window := PB Window No
hDC=GetDC_(hWnd)
RGBCol=GetBkColor_(hDC)

oder
Farbe = GetWindowColor(#Window)

Re: Farbe eines Fensterhintergrund in RGB ermitteln.

Verfasst: 14.11.2025 15:19
von mk-soft
Funktioniert nicht mehr mit Windows 10 oder höher ...

Code: Alles auswählen

     If StartDrawing(WindowOutput(0))
      color = Point(0,0)
      Debug Hex(color)
      StopDrawing()
    EndIf

Re: Farbe eines Fensterhintergrund in RGB ermitteln.

Verfasst: 14.11.2025 15:54
von TroaX
Das Finktioniert generell mit den alten Steuerelementen nicht richtig. Ohne API kommst du da nicht weit. Am Ende sind es nur spezifische Hintergründe. Aber einen "echten" Darkmode habe ich das erste mal unter Linux gesehen. Und da machen GTK/Qt das über die Systemeinstellungen automatisch. Da brauchste dir keine Platte machen. Unter Windoof ist es aber nur Frust :(

Re: Farbe eines Fensterhintergrund in RGB ermitteln.

Verfasst: 14.11.2025 17:36
von mk-soft
Das hat Fred, unser PureBasic Entwickler, auch schon gesagt das Windows mit ihren Controls und API's sehr ungenügend daran gearbeitet haben.
Und nicht jeder will DotNet verwenden.

Re: Farbe eines Fensterhintergrund in RGB ermitteln.

Verfasst: 14.11.2025 18:12
von TroaX
Ich weiß. Ich erst recht nicht xD
Aber durch das neue WebViewGadget mache ich mir da keine Sorgen mehr. Ich bette einfach eine Spiderbasic-Anwendung so in ein Purebasic-Container und fertig ist ^^

Re: Farbe eines Fensterhintergrund in RGB ermitteln.

Verfasst: 14.11.2025 19:04
von MacThommes
Danke schon mal.
Also mit APIs möchte ich eigentlich nicht arbeiten, da diese unter Linux nicht funktionieren, wie ich anderswo gelesen habe. 8)
Das Progrämmchen soll auf allen Systemen laufen. Nicht nur auf dem Mac.
Mit "Farbe = GetWindowColor(#Window)" funktioniert nicht.
Ich habe festgestellt, das man da den Wert bekommt, den die obere Fensterleiste hat und nicht die Füllfarbe des Fensters.
Also: Unbrauchbar. :shock:

Code: Alles auswählen

     
   If StartDrawing(WindowOutput(0))
      color = Point(0,0)
      Debug Hex(color)
      StopDrawing()
    EndIf
... gibt mir eine 0 raus....
Seltsam auch: Alle Fenster auf meinem Desktop haben die RGB-Werte von 30, 30, 30.
Die Programmfenster, die ich dann bei PB öffne, haben verschiedene Werte. Mal: 33, 32, 36 oder 43, 42, 51... usw. :?

Re: Farbe eines Fensterhintergrund in RGB ermitteln.

Verfasst: 14.11.2025 22:10
von mk-soft
Eigentlich nehme ich immer die Standard Farben. Also ändere ich keine.
Und wenn, dann keine Farbe von System.

Re: Farbe eines Fensterhintergrund in RGB ermitteln.

Verfasst: 15.11.2025 11:09
von MacThommes
mk-soft hat geschrieben: 14.11.2025 22:10 Eigentlich nehme ich immer die Standard Farben. Also ändere ich keine.
Und wenn, dann keine Farbe von System.
Ich glaube, das ist die beste Lösung :D . Weil, wie weiter oben beschrieben, irgendwie die Farben der Fenster vom System ohne irgend ein System vergeben werden :? .
Werde nachher mal nachsehen, wie ich die Hintergrundfarbe eines Fensters ändere. Ich mit Sicherheit kein Hexenwerk.
Dann wünsche ich allen hier noch ein schönes Wochenende und schöne Grüße aus den schönen Ammergauer Alpen! 8)

Re: Farbe eines Fensterhintergrund in RGB ermitteln.

Verfasst: 15.11.2025 12:16
von Shardik
MacThommes hat geschrieben: Also mit APIs möchte ich eigentlich nicht arbeiten, da diese unter Linux nicht funktionieren, wie ich anderswo gelesen habe. 8)
Das Progrämmchen soll auf allen Systemen laufen. Nicht nur auf dem Mac.
Es gibt aber auch die Möglichkeit, für Linux, MacOS und Windows die jeweils spezifischen API-Funktionen zu verwenden - dann läuft ein solches Programm auf allen drei Plattformen. Eine Sammlung von solchen Multi-Plattform-Funktionen habe ich hier zusammengestellt.