我有一个代码,它通过PrintWindow函数捕获给定的窗口。具体来说,我确实在浏览器中捕获网页。此代码在独立的Windows应用程序中进行测试,并且可以正常运行。相同的代码已合并到NPAPI插件中并加载到Google Chrome中。出现问题。如果Chrome只有一个标签,则代码可以正常运行。如果Chrome有2个标签,则代码会返回预期大小的黑框。我在同一个窗口句柄(Chrome_RenderWidgetHostHWND)上同时测试了独立应用程序和插件。应用程序始终有效,如果浏览器中打开了多个选项卡,则插件始终会失败。
如果有人知道如何解决这个问题,我真的很感激。
提前致谢。
NB。由于我的用例存在更大的缺点,其他捕获窗口的方法也不适用。
答案 0 :(得分:0)
我打赌你遇到了沙盒问题。
您的应用可能会以“正常”完整性级别运行,因此将WM_PRINT
或WM_PRINTCLIENT
消息发布到Chrome进程没有问题。 (PrintWindow
使用这些消息。)
当你是Chrome浏览器的插件时,我相信你的代码是一个“低”的完整性过程(这可以减少粉碎攻击的可能性)。因此,将消息发送到另一个进程中的窗口失败并不会让我感到惊讶。
不幸的是,这并不能解释为什么Chrome只有一个标签时可以正常运行。在打开多个标签的情况下,您是否在应用和插件中都找到了Chrome_RenderWidgetHostHWND
的相同实例?通常,每个选项卡都有一个这样的窗口。你是怎么找到窗户的?