2009-10-04 5 views
6

Wie kann ich bildschirmminimierte Fenster drucken? Ich glaube, es ist möglich, da Windows-Taskleiste eine Vorschau eines Fensters erstellen kann, selbst wenn es minimiert ist.Wie kann ich bildschirmminimierte Fenster drucken?

+0

Der Vista Desktop-Manager schafft es, also sehe ich nicht warum nicht. Wie niedrig der Level sein muss, ist eine andere Frage ... – Noldorin

Antwort

3

Ich bin ziemlich sicher, dass dies nicht möglich ist, zumindest durch eine externe Anwendung wie Ihre. Wenn ein Anwendungsfenster minimiert wird, kann das Fenster keine WM_PAINT-Nachrichten empfangen (und erhält keine), was bedeutet, dass es nicht möglich ist, das Fenster zu bitten, sich neu zu zeichnen, während es minimiert wird (oder "ein Bild davon macht"). Dies ist eine Einschränkung (oder eine Regel) der Windows-API.

Die Taskleiste „wird, um dieses“ durch ein im Cache gespeicherte Bild angezeigt wird (die die letzte Momentaufnahme ist die DWM des Fensters nahm, bevor es minimiert wurde) und so ist es nicht in der Tat ein aktuelles Bild des Fensters nehmen. Sie können dies testen, indem Sie eine Anwendung ausführen, die sich regelmäßig aktualisiert und dann minimiert - Sie werden sehen, dass das Vorschaubild erst nach der Wiederherstellung aktualisiert wird.

Die einzige Möglichkeit, um dies zu umgehen, ist zu tun, was die Taskleiste tut - in regelmäßigen Abständen ein Bild des gewünschten Fensters, und wenn es minimiert ist, verwenden Sie stattdessen das zwischengespeicherte Bild. Dies bedeutet natürlich, dass Ihre App das Zielfenster einige Zeit im Voraus verfolgt haben muss (dies funktioniert natürlich nicht, wenn Sie das erste Mal eine Momentaufnahme des Fensters machen wollen, während es minimiert ist).

+1

Siehe http://msdn.microsoft.com/en-us/library/aa969541%28VS.85%29.aspx, um die DWM-Funktionen zu verwenden, die die Taskleiste verwendet . –

+1

Nice find, ich hatte keine Ahnung, dass API existierte (obwohl es nur unter Vista oder neuer verwendet werden würde) – GRB

+0

Was passiert, wenn Windows Aero deaktiviert ist? –