【发布时间】:2012-10-25 20:59:11
【问题描述】:
我需要将我的屏幕捕获为视频,为此我使用了 Expression Encoder 4,但在我的应用程序中我还需要捕获一个窗口,但我无法找到一种方法,我尝试使用 EE4动态更改我的ScreenCaptureJob 的CaptureRectangle,但这似乎是不可能的。所以我的问题是,您是否知道最好使用 C# 或 C++ 来执行此“单窗口捕获”?
【问题讨论】:
标签: c# screen-capture
我需要将我的屏幕捕获为视频,为此我使用了 Expression Encoder 4,但在我的应用程序中我还需要捕获一个窗口,但我无法找到一种方法,我尝试使用 EE4动态更改我的ScreenCaptureJob 的CaptureRectangle,但这似乎是不可能的。所以我的问题是,您是否知道最好使用 C# 或 C++ 来执行此“单窗口捕获”?
【问题讨论】:
标签: c# screen-capture
您可以获取您感兴趣的窗口的窗口句柄,设置一个计时器,并在每个计时器滴答声中捕获该窗口的内容。这样做并非易事,但肯定是可能的。多年前我用 C 语言做过,但那段代码早已不复存在。
如果您只想捕获屏幕的矩形区域,问题会更简单。您可以获取窗口句柄,查询其大小和位置,然后从屏幕上复制该区域。在 C 或 C++ 中,您将获得桌面 DC 并从中复制位。在 C# 中,您可以创建一个窗口大小的Bitmap,调用Graphics.FromImage 来获取图像的Graphics 对象,然后调用CopyFromScreen 来获取窗口内容。缺点是只有在没有任何东西覆盖有问题的窗口时才有效。如果有东西覆盖了窗口的任何部分,你就会捕捉到它。
无论如何,您最终都会得到需要组合成视频的图像流。有许多图书馆可以做到这一点。对于 C# 解决方案,您可以从查看 create video from streamed images c# 开始。我怀疑有类似的 C++ 库。还有一些命令行工具可以做到这一点,尽管我对它们的体验并不令人满意。
【讨论】: