Hallo,
ich möchte einen Bildschirmschoner erstellen, der unter Windows XP eine Hardcopy des aktuellen Bildschirms macht, die ich dann verändern kann. Dabei komme ich einfach nicht weiter.
Ich habe meine Anfrage in das C/C++-Forum gestellt, weil ich C für meinen Bildschirmschoner verwendet habe. Im Prinzip ist das Problem aber unabhängig von der Programmiersprache.
Der Reihe nach:
Ich habe einen Bildschirmschoner mit C erstellt, der auch wunderbar funktioniert. Der einzige Haken: Es gelingt mir nicht eine Hardcopy des aktuellen Bildschirms zu erstellen, um mit dieser dann weiterzuarbeiten. Der Code dafür ist prinzipiell in Ordnung, denn wenn ich den Bildschirmschoner teste funktioniert es wie gewünscht und erwartet.
Das Vorgehen für die Hardcopy ganz grob:
HDC hdcMem;
hdcMem = CreateCompatibleDC( hdc );
*phBmp = CreateCompatibleBitmap( hdc, breite, hoehe );
SelectObject( hdcMem, *phBmp );
BitBlt( hdcMem, 0, 0, breite, hoehe, hdc, 0, 0, SRCCOPY );
DeleteDC( hdcMem );
Ich habe zwischenzeitlich herausgefunden, dass unter XP (bzw. ab NT) der Bildschirmschoner auf einem eigenen Desktop ("Screen-Saver") ausgeführt wird und nicht auf dem Standard-Desktop ("Default"). Aus diesem Grund enthält phBmp nicht eine Hardcopy meines Desktops sondern nur des leeren Screen-Saver-Desktops, also meines Hintergrundbilds.
Laut MSDN ist es nicht möglich, im Bildschirmschoner mittels SwitchDesktop auf das Default-Desktop zu wechseln. Es muss doch aber irgendeine Möglichkeit geben, zu Beginn des Bildschirmschoners den aktuellen Bildschirminhalt "abzufotografieren".
Ich hatte auch schon den Gedanken eine zweite Anwendung zu erstellen, die die Hardcopy erstellt und dann irgendwie an den Bildschirmschoner übergibt, aber richtig gut finde ich diesen Ansatz ehrlich gesagt nicht.
Hat jemand eine Idee oder einen Hinweis für mich, wie ich mein Ziel erreichen kann? Ich würde mich wirklich sehr freuen, wenn mir jemand hierbei helfen könnte! Vielen Dank!
Gruß