如何在窗口最小化的情况下进行屏幕截图?

6
如何截屏最小化的窗口?我相信这是可能的,因为Windows任务栏可以创建一个窗口的预览,即使它被最小化了。

Vista桌面管理器可以做到,所以我不明白为什么不能。需要下探多低的级别是另一个问题... - Noldorin
2个回答

4

3
我非常确定这是不可能的,至少对于像您这样的外部应用程序而言是如此。当应用程序窗口被最小化时,窗口无法(也不会)接收WM_PAINT消息,这意味着在窗口最小化时要求其重新绘制自己(或者“拍照”)是不可能的。这是Windows API的限制(或规则)。
任务栏通过显示缓存图像(即DWM在窗口最小化之前拍摄的最后一个快照)“绕过了这个问题”,因此实际上并没有获取窗口的当前图片。您可以通过运行定期更新自身的应用程序,然后将其最小化来测试此功能-您将看到预览图像直到恢复才会更新。
您唯一可以解决此问题的方法是执行任务栏所做的操作-定期拍摄您想要的窗口的图像,并在其最小化时使用缓存的图像。当然,这意味着您的应用程序必须事先跟踪目标窗口一段时间(如果您首次想要拍摄窗口的快照是在其最小化时,则显然无法正常工作)。

1
请访问 http://msdn.microsoft.com/en-us/library/aa969541%28VS.85%29.aspx 以使用任务栏使用的 DWM 函数。 - Julien Lebosquain
1
好发现,我不知道那个API的存在(尽管它只适用于Vista或更新版本)。 - GRB
如果Windows Aero被禁用会发生什么? - Alon Gubkin
如果您尝试在Aero被禁用时获取缩略图,很可能会出现错误(例如,当Aero关闭时,任务栏失去了显示窗口缩略图的能力)。 - GRB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接