2009-10-04 2 views
6

Как я могу распечатать окна с минимизацией экрана? Я считаю, что это возможно, так как панель задач Windows может создавать предварительный просмотр окна, даже если он сведен к минимуму.Как распечатать окна с минимизацией экрана?

+0

Менеджеру Vista Desktop удается это сделать, поэтому я не понимаю, почему нет. Как низкоуровневый вам нужно идти, это еще один вопрос ... – Noldorin

ответ

3

Я довольно уверен, что это невозможно, по крайней мере, внешним приложением, таким как ваше. Когда окно приложения сведено к минимуму, окно не может (и не принимает) сообщения WM_PAINT, что означает, что невозможно запросить, чтобы окно перерисовывало себя, когда оно сведено к минимуму (или, «сфотографировать его»). Это ограничение (или правило) Windows API.

панель задач «получает вокруг этого», отображая кэшированные изображения (которое последний снимок DWM взял в окно, прежде чем она была сведена к минимуму) и поэтому является не фактически принимая текущее изображение окна. Вы можете проверить это, запустив приложение, которое периодически обновляет себя, а затем минимизирует его - вы увидите, что изображение предварительного просмотра не будет обновляться до тех пор, пока оно не будет восстановлено.

Единственный способ, которым вы можете обойти это, - это сделать то, что делает панель задач, - периодически делать снимок нужного окна, а когда он сведен к минимуму, используйте вместо него кешированное изображение. Конечно, это означает, что ваше приложение должно было следить за целевым окном заблаговременно (это, очевидно, не будет работать, если первый раз, когда вы хотите сделать снимок окна, пока он сведен к минимуму).

+1

См. Http://msdn.microsoft.com/en-us/library/aa969541%28VS.85%29.aspx, чтобы использовать функции DWM, которые использует панель задач , –

+1

Приятная находка, я понятия не имел, что API существует (хотя он будет полезен только для Vista или новее) – GRB

+0

Что происходит, если Windows Aero отключена? –