如何窃取另一个应用程序的视频(通过hwnd),并显示它在单独的应用程序

本文关键字:应用程序 显示 单独 hwnd 另一个 何窃取 的视频 通过 | 更新日期: 2023-09-27 17:50:59

我想把Skype的视频插入到我自己的应用程序中。我正在使用skype4com来控制呼叫,但我找不到任何参考或示例,建议使用其视频流来将其嵌入您的应用程序。我试着加入SkypeKit项目,但一个月过去了,我还在等待他们的任何消息,我听说你经常只是在等待他们的消息。

我想知道是否还有其他我可以做的事情,一些简单的东西,如找到视频Skype正在显示和使用它在/为面板/表单等。我在应用程序中拥有的,然后隐藏Skype窗口的其余部分。我试着在谷歌上搜索这个主题,但也许是因为我不知道这个概念的正确描述,所以我找不到任何东西。

粗略地说,我知道我可以做一些事情,比如使用窗口句柄抓取帧的位图,并在我自己的应用程序中显示它,隐藏Skype,但这可能会有很多开销。

有人知道如何做到这一点或什么概念,这代表,所以我可以找到它在我自己?

谢谢!

如何窃取另一个应用程序的视频(通过hwnd),并显示它在单独的应用程序

这不是问题的最终或完整答案,但它包含了我所问问题的部分答案…

最后我尝试了各种各样的事情,取得了不同程度的成功。

解决这类问题的第一个问题显然是确定你试图重新利用的视频是否通过DirectX渲染。

如果视频不是DirectX渲染,那么你确实可以从窗口捕获视频并在你喜欢的任何地方实时播放。网上有各种各样的例子教你如何从窗口中捕获位图。诀窍是,窗口可以通过不透明度不可见,但不能最小化(最小化它不会更新)!你只需要使用你在Window中找到的hwnd它有视频在循环中通过各种方法抓取那些位图的副本然后在你想要的地方显示它们。根据你电脑的速度和视频的大小,这种方法效果尚可,我没有遇到任何问题。

如果你试图劫持的视频是通过DirectX渲染的,那么你大部分,但不是全部,运气不好。因为DirectX视频是由显卡(而不是操作系统)直接渲染到操作系统表面上的,所以你必须使用一种完全不同的方法来抓取视频作为帧并在其他地方显示它们。有各种各样的例子如何做DirectX屏幕捕获。然而,最大的问题是,如果DirectX窗口被隐藏,重叠,或者不透明度设置为零,你将无法捕获任何东西!我甚至尝试使用虚拟桌面管理软件,看看我是否可以欺骗系统在虚拟窗口中播放DirectX视频,然后捕获该视频以在我想要的地方播放,但当然它比我聪明,我得到了一个空白图像。所以,底线似乎是,除非你做一些非常极端的事情,比如写一个虚拟显卡驱动程序,否则你就不走运了。(有各种各样的兴趣方法涉及编写DirectX代理,可以捕获视频/静态图像到显卡的方式,但我仍然认为你可能需要一个虚拟图形驱动程序来说服它显示表面是可见的,因此值得渲染。)