Screenshot von nicht sichtbaren oder verdeckten Fenstern?!
-
Kann man nicht einfach ein WM_PAINT an das fenster schicken und als parameter einen memorydc angeben, dessen bitmap man dann speichert?
-
Wo steht denn bei mir "keineswegs"?
Und wo kann man bei "WM_PAINT" etwas übergeben/mitgeben?
-
win32.hlp schrieb:
WM_PAINT
hdc = (HDC) wParam; // the device context to draw inSendMessage(zielhwnd, WM_PAINT, memdc, 0);Wie gesagt, war nur ne überlegung, ob das funktioniert weiß ich nicht.
BTW:
Wie erzeugt man denn einen eigenen Desktop?Edit:
hmm, laut der MSDN hat WM_PAINT gar keine Parameter.
In der Win32.hlp aber sehr wohl. Ist das jetzt ein undokoumentiertes Feature?
Das es rausgeflogen ist, kann ich mir nicht vorstellen, da würden ja einige Programme nicht funktionieren.
-
WM_PAINT schrieb:
LRESULT CALLBACK WindowProc(
HWND hwnd, // handle to window
UINT uMsg, // WM_PAINT
WPARAM wParam, // not used <-- !!
LPARAM lParam // not used <-- !!
);http://msdn.microsoft.com/en-us/library/ms534901(VS.85).aspx
Ältere msdn-doku sagt tatsächlich das man als wParam nen HDC übergeben kann.
Aus eigener Erfahrung kann ich aber sagen: Dummerweise interessiert sich für den übergebenen HDC so gut wie keine Anwendung
-
WM_PAINT hat *keine* Parameter. Deine alte Doku ist alt...
Auf reaktion vonWM_PAINT muss die Anwendung "BeginPaint" aufrufen, welches dann *intern* den HDC erzeugt!
Somit kannst Du durch senden von WM_PAINT nichts erreichen.
-
fuzolan schrieb:
Ich habe schonmal ein Desktopmanager gesehen der dies konnte. Müsste also gehen, aber nur wie?!
Wenn das die Tatsache ist, dann muß es eine Möglichkeit geben.
Wie Jochen schon schrieb, mit dem zweiten, verdeckten (oder virtuellen) Desktop könnte es klappen.Alternativ statt dem zweiten Desktop, einen zweiten virtuellen Monitor verwenden. (Ich weiß, das wäre 'ne ordentliche Programmieraufgabe gewesen bis das in allen Belangen fehlerfrei funktioniert, es geht erstmal nur darum, welche Ideen einem so einfallen...
)Ein weiterer Ansatzpunkt: Dieser Desktopmanager macht während der ganzen Laufzeit im Hintergrund periodisch einen Screenshot von allen sichtbaren Fenstern, und speichert diese intern.
Sobald der Desktopmanager aufgerufen wird, blendet er die jeweils letzten Screenshots ein. Damit könnte es evtl. auch funktionieren.
Nachteil ist natürlich, daß der Inhalt des Screenshots von mittlerweile unsichtbaren Fenstern nicht mehr dem aktuellen Stand entsprechen kann, als wenn das Fenster immer noch sichtbar wäre. Aber immer noch besser als nichts
Martin
-
Geht das nicht im Groben so:
Benutzerdefinierte Message MY_WM_PAINT definieren.
Das HDC hdcDest wo der Screenshot reingeblittet werden soll ( BitBlt )
in wParam verpacken, das HDC hdcSrc des begehrten Fensters in lParam verpacken.
SendMessage an das für das Zeichnen zuständige Fenster abschicken.?
-
r3d4 schrieb:
Benutzerdefinierte Message MY_WM_PAINT definieren.
Das setzt aber voraus, daß alle Applikationen diese Message MY_WM_PAINT kennen müssen!
Und somit funktioniert Dein Ansatz logischerweise nur bei eigenen, selbstgeschriebenen Applikationen.Oder habe ich da was mißverstanden?
Martin
-
Lese gerade, geht doch nicht wie ich dachte. Hier der Artikel dazu:
http://www.fengyuan.com/article/wmprint.html
-
Bei den Powertoys gibt es doch ne Alternative für alt+tab
Hier werden alle Fensterinhalte auch recht fix angezeigt.
Nur wie?!
-
Schau einfach in den Source:
http://www.ntwind.com/download/TaskSwitchXP_2.0.11-src.zip
-
Wie macht Vista das denn? Da kann bekommt man ja eine Art grafischen Tooltip, wenn man in der Taskleiste über eine minimierte Anwendung fährt. Geht das auch über einen zweiten Desktop?
-
Vermutlich speichert er sich beim *deaktivieren* des Fensters den Inhalt... sowas hab ich zumindest irgendwo gelesen...
-
Jochen Kalmbach schrieb:
Vermutlich speichert er sich beim *deaktivieren* des Fensters den Inhalt... sowas hab ich zumindest irgendwo gelesen...
Vielleicht vorhin in meinem Post in diesem Thread?

(Ok, es spielt eigentlich ja keine Rolle, ob periodische Screenshots, oder erst beim Minimieren, wenn man von periodischer Rechenleistung mal absieht... )Martin