PrintWindow在Windows 10中的非活动桌面上

问题描述:

所以,我试图使用PrintWindow API拍摄位于非活动桌面的窗口的图片时遇到了问题,它开始让我紧张。PrintWindow在Windows 10中的非活动桌面上

问题是,在特定的窗口中,即使PrintWindow成功,并且我得到了我想要的窗口图像,该图像始终是上次桌面活动时的过期副本。起初,我认为窗口没有收到任何输入,但经过一些检查后,我发现它仍然接收和处理输入,但在桌面再次激活之前不会进行任何更改。我在Windows 7和10中测试过,并且只发生在Windows 10中。

经过一些更多的检查后,我发现主窗口实际上更新了自己,就像预期的那样,它是它的子窗口,覆盖了所有的客户端主窗口的区域,谁来负责。这两个窗口创建了以下样式:

类样式: 0x00000003 = CS_VREDRAW | CS_HREDRAW

父扩展样式:00000000

父标准样式: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

“非活动桌面”是什么意思? – VTT

+0

没有足够的程序员为WM_PRINTCLIENT编写消息处理程序。容易做到,他们只是没有想到它。这使得很难正确实现PrintWindow()。解决方法没有记录,但我想像Aero创建的支持位图会很有用。挂断时,桌面不活动时不再更新。类似的东西。 –

+0

@VTT不是用户当前可见的桌面。 – Tray

Windows不显示不可见的窗口。您将获得当前图像,这与您将鼠标悬停在任务栏图标上时获得的小预览窗口相同。
没有程序本身显式调用渲染函数,窗口不会更新。如果更新了窗口,它将无法获得当前窗口的屏幕截图。

+0

同一桌面中的其他窗口与PrintWindow一样正常显示,并且即使在Windows 7中也会显示相同的窗口。这是Windows 10唯一的问题。 – Tray

+0

让我感到惊讶。我认为这是预期的行为,被覆盖的窗口根本不会被更新。 – xyious

+0

我也尝试过使用几种不同的方法强制窗口重绘,但我所做的只是擦除窗口的内容,在窗口重新激活之前不会重绘。 – Tray