5

我需要将我的屏幕捕获为视频,为此我使用了 Expression Encoder 4,但在我的应用程序中,我还需要捕获一个窗口,但我找不到这样做的方法,使用 EE4 我尝试动态更改CaptureRectangle我的ScreenCaptureJob,但这似乎是不可能的。所以我的问题是,您是否知道最好使用 C# 或 C++ 来执行此“单窗口捕获”?

4

1 回答 1

2

可以获取您感兴趣的窗口的窗口句柄,设置一个计时器,并在每个计时器滴答声中捕获该窗口的内容。这样做并非易事,但肯定是可能的。多年前我在 C 中做过,但该代码早已不复存在。

如果您只想捕获屏幕的矩形区域,问题会更简单。您可以获取窗口句柄,查询其大小和位置,然后从屏幕上复制该区域。在 C 或 C++ 中,您将获得桌面 DC 并从中复制位。在 C# 中,您可以创建一个Bitmap窗口大小,调用Graphics.FromImage以获取Graphics图像的对象,然后调用CopyFromScreen以获取窗口内容。缺点是只有在没有任何东西覆盖有问题的窗口时才有效。如果有东西覆盖了窗口的任何部分,你就会捕捉到它。

无论如何,您最终都会得到需要组合成视频的图像流。有许多图书馆可以做到这一点。对于 C# 解决方案,您可以从查看从流式图像 c# 创建视频开始。我怀疑有类似的 C++ 库。还有一些命令行工具可以做到这一点,尽管我对它们的体验并不令人满意。

于 2012-11-06T04:42:59.460 回答