Die DirectDraw-Palette „Exklusiv“ ist eigentlich nicht exklusiv

Wir pflegen ein altes Videospiel, das mit DirectDraw einen 256-Farben-Vollbild-Grafikmodus verwendet. Das Problem ist, dass einige Anwendungen, die im Hintergrund ausgeführt werden, manchmal versuchen, die Systempalette zu ändern, während das Spiel ausgeführt wird, was zu beschädigten Grafiken führt.

Wir können (manchmal) erkennen, wann dies passiert, indem wir die WM_PALETTECHANGED-Nachricht verarbeiten. Vor einigen Update-Versionen haben wir die Protokollierung hinzugefügt (einfach den Fenstertitel / die Klasse / den Prozessnamen protokollieren), wodurch Benutzer problematische Anwendungen erkennen und schließen konnten. MSN Live Messenger war ein häufiger Schuldiger.

Das Problem wurde schlimmer, als wir herausfanden, dass Windows Vista (und 7) es "von selbst" macht. Die WM_PALETTECHANGED-Parameter verweisen auf CSRSS und das Desktop-Fenster. In Vista bestand eine Problemumgehung darin, einen beliebigen Ordner (Computer, Dokumente usw.) zu öffnen und ihn während der Ausführung des Spiels geöffnet zu lassen. Klingt lächerlich, hat aber in den meisten Fällen funktioniert. In Windows 7 funktionierte nicht einmal diese Problemumgehung mehr. Benutzer stellten fest, dass das Beenden einiger Dienste (Windows Update und der Indexdienst) das Problem bei einigen Konfigurationen ebenfalls löste.

Vor einiger Zeit habe ich gerade angefangen, zufällige Dinge auszuprobieren, in der Hoffnung, eine Lösung zu finden. Ich habe festgestellt, dass das Festlegen der GDI-Palette (mit Create / SelectPalette) vor dem Festlegen der DirectDraw-Palette (mit IDirectDrawPalette :: SetEntries) die Palette wiederherstellen würde, nachdem sie beschädigt wurde (WM_PALETTECHANGED-Handler). SetSystemPaletteUse und das Aufrufen von SetPalette auf der primären Oberfläche haben etwas mehr geholfen. Es ist jedoch immer noch ein Flackern erkennbar, wenn eine Anwendung versucht, die Palette zu stehlen, was besonders beim Ausblenden wichtig ist.

Frage: Gibt es eine Möglichkeit, eine "echte" exklusive Palette zu erhalten, die es anderen Anwendungen völlig verbietet, die Windows-Palette zu ändern, solange unser Spiel den Fokus behält?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage