0

所以我有这个项目,在这个项目中,我需要有几个选项卡 (TPageControl) 运行 Flash 页面,并且不时抓取它们的屏幕截图,而无需切换活动选项卡。首先,我尝试了 TChromiumOSR,但在其中看不到 flash,如果我单击页面按钮打开一个弹出窗口并最大化 flash,则可以正常工作。所以它看起来不像是闪光灯的问题,而是帧或某事的问题。无论如何是不行的。

然后我尝试了 TChromium,一切正常,但我不知道如何在不切换选项卡的情况下获取非活动 TTabSheet 上的控件的屏幕截图。

使用最新的 dcef3 中继

有任何想法吗?谢谢

编辑:事实证明,在 OSR 中看不到闪存是一个旧的铬错误。如果嵌入代码将“wmode”设置为“透明”以外的其他内容,它实际上正在播放但不可见。我已经设法通过 js 更改了该属性。要真正看到变化,需要从 DOM 中删除 flash 对象并再次添加:

  chr1.browser.GetFrame(str[i]).ExecuteJavaScript('document.getElementsByName("wmode")[0].value="transparent";', '', 0);
  chr1.browser.GetFrame(str[i]).ExecuteJavaScript('document.getElementsByName("wmode")[1].value="transparent";', '', 0);
  chr1.browser.GetFrame(str[i]).ExecuteJavaScript('var wtf = document.getElementById("gameApp2");', '', 0);
  chr1.browser.GetFrame(str[i]).ExecuteJavaScript('document.getElementById("gameApp2").remove();', '', 0);
  chr1.browser.GetFrame(str[i]).ExecuteJavaScript('document.body.appendChild(wtf);', '', 0);
4

2 回答 2

0

如果选项卡没有显示(它不是前面的),它不会被绘制(这是操作系统的事情)。如果它没有被绘制,则没有任何东西可以捕获屏幕截图。

如果您的要求是捕获 Flash 页面而不显示它,那么您将不得不找到另一种方法来实现它。

于 2013-06-22T17:40:36.220 回答
0

假设您的 Chrome 仍然基于 WebKit,我知道 WebKitGTK 有自己的快照引擎,如果它进行得足够深,也许您可​​以利用它进行捕获。

有一次,TPageControl 存在一个行为问题,即在选择选项卡之前,其子项都没有创建有效句柄。我不知道是否仍然如此,但如果是这样,它可能会使您不切换标签的愿望复杂化。

假设控件有一个有效的窗口句柄,您可以创建一个 TBITMAP,锁定它的画布,抓住画布的句柄 (DC) 并为控件伪造一个 WM_PAINT 以使其渲染到您的位图。

于 2013-06-23T05:37:16.880 回答