C++ - 如何屏幕捕获,除了一些窗口

Suc*_*nea 7 c++ windows winapi screen-capture hide

情况:我有一个通过Internet执行屏幕共享的软件,其中一个用户充当演示者,其他用户充当观众/与会者.

除了演示窗口之外,演示者还有一组出现在屏幕上的非共享窗口(用于开始共享/停止共享等的按钮栏,Skype窗口等).

演示者可以通过屏幕共享软件的设置进行配置,使这些非共享窗口不可见(即它们不会出现在发送给与会者的屏幕共享中,但它们背后的窗口内容将显示在屏幕截图中).

屏幕截图以大约每秒10帧或更快的速度发送.

问题:除了这些NON-SHARING-WINDOWS窗口外,我如何以编程方式捕获屏幕?

备注:

  • 由于每秒帧数较高,我无法最小化/最大化/设置这些窗口的alpha,因为这样窗口就会闪烁.该应用程序是用Win32 C++编写的.
  • 我会使用分层窗口,但由于Windows 7桌面组合功能,这不是开箱即用的(在Windows 8中,您不能再使用DwmEnableComposition暂时以编程方式禁用合成)
  • 我可以使用Windows XP/2000/7等的分层窗口方法,以及Windows 8的不同方法(如果有的话),但我更喜欢在所有系统上运行的单个进程
  • 我还可以尝试通过捕获单个图像(桌面,需要捕获的窗口)和使用z-index创建最终图像来"组合"屏幕截图,但由于所需的每秒帧数值,这个过程太慢了.

get*_*le1 -1

我认为将捕获内容限制在一个大窗口内会更简单。否则,您将需要从屏幕截图中剪切一些窗口。

  • 无论如何,我的问题更多地是在技术方面 - 有谁知道我可以使用哪些 **C/C++ 指令** 来捕获 Windows 7 和/或 8 中的屏幕,并且 **不** 渲染一些可见窗口?我正在寻找**等效的分层窗口**(请参阅以下[MSDN链接](http://social.msdn.microsoft.com/Forums/zh/vcgeneral/thread/6f1e9f74-ae6e-4df1-92b8- 72e7a98bf58f)使用分层窗口的示例) (4认同)