因此,在尝试使用PrintWindow API拍摄位于非活动桌面的窗口时,我遇到了一个问题,它开始让我感到紧张。
问题在于,使用特定窗口,即使PrintWindow成功并且我获得了我想要的窗口的图像,该图像始终是上次桌面活动时的过时副本。起初我以为窗口没有收到任何输入,但经过一些检查后我注意到它仍然接收并处理输入,但在桌面再次激活之前不会进行任何更改。我在Windows 7和10中进行了测试,这只发生在Windows 10中。
经过一些检查后,我发现主窗口实际上正如预期的那样自我更新,它是它的子,它涵盖了主窗口的所有客户区,谁应该受到责备。这两个窗口是使用以下样式创建的:
班级样式: 0x00000003 = CS_VREDRAW | CS_HREDRAW
父级扩展样式:0x00000000
父标准样式:0x96000000 = WS_POPUP | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS
子扩展样式:0x00000020 = WS_EX_TRANSPARENT
子标准样式:0x56300000 = WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_HSCROLL | WS_VSCROLL
我已经尝试了大量无数的事情试图解决这个问题,而且我已经广泛搜索了网络,但都无济于事。我很沮丧,如果没有人至少可以为此做出解释,我已经准备好放弃了。
答案 0 :(得分:0)
Windows不会渲染不可见的窗口。您将获得当前图像,这与将鼠标悬停在任务栏图标上时获取小预览窗口时获得的图像相同。
如果没有程序本身显式调用render函数,窗口将不会更新。如果更新窗口,它将无法获得当前窗口的截图。