屏幕截图忽略了一些窗口

5
我正在使用 MFC,并尝试捕获桌面的 BMP。我使用 GetDC(NULL) 来实现,但它似乎忽略特定的皮肤窗口。它似乎忽略使用 UpdateLayeredWindow 绘制的窗口。这种行为仅在 Vista x64 和 XP 上发生。我还尝试使用 desktop HWND 的 GetWindowDC,但结果相同。
注意:
1. 打印屏幕功能正常。 2. 在启用 Aero 的情况下,Vista 的屏幕截图是正常的,“特殊”的窗口也会出现。因此,在禁用 Aero 的情况下,只会在 Vista 上出现该问题。
有什么想法吗?
谢谢。

对我来说,它没有捕捉到视频。 - Umair Ahmed
有趣...按下打印屏幕键是否执行相同的操作? - sharptooth
@Umair Ahmed:我认为打印屏幕本身不能捕捉视频。 - the_drow
实际上,打印屏幕的功能表现符合预期。 - Nemok
是的,打印屏幕有时无法捕捉到屏幕(不是总是这样,但我从未确切地排除过它失败的原因)。 - Umair Ahmed
2个回答

8
调用BitBlt()函数时,需要添加CAPTUREBLT标志以“捕获”分层窗口。

1
在我看来,这种晦涩的知识正是这个网站所关注的。谢谢(即使我可能永远也用不上它 :) ) - Roel
有趣的是,如果我包括 CAPTUREBLT,那么我就不会得到窗口框架,只有客户区域。似乎是一个进退两难的局面。 - Adrian McCarthy

1

这可能是由于桌面组合造成的。在Vista中关闭Aero桌面组合,然后再尝试一次。


Aero 被关闭了,XP 系统也没有它……当 Aero 被关闭时可能会出现这个问题。将测试 Aero 打开后是否能解决。 - Nemok
确实进行了一些测试,似乎当我在Vista中禁用Aero时,“特殊”的窗口不会出现。启用它们时会出现。 在XP中没有启用Aero的选项,因此问题每次都会发生。有什么想法吗? - Nemok

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