C++ -Как сделать снимок экрана -за исключением некоторых окон

Ситуация:У меня есть программное обеспечение, которое выполняет совместное использование экрана через Интернет, где один пользователь выступает в качестве докладчика, а другие пользователи выступают в роли зрителей/участников.

Помимо окон презентации, у докладчика также есть набор НЕ -ОБЩИЙ -ОКНА, которые появляются на экране (панель кнопок для запуска/остановки совместного использования/и т. д., окно Skype и т. д. ).

Докладчик может настроить в настройках программного обеспечения совместного доступа к экрану, чтобы сделать эти -ОБЩИЕ -WINDOWS невидимыми (, т. е. они не будут отображаться в совместном использовании экрана, которое отправляется участникам, но содержимое окон за ними появится на снимке экрана ).

Скриншоты отправляются со скоростью приблизительно 10 кадров -в -секунду или быстрее.

Вопрос:как можно программно захватить экран, кроме этих НЕ -ОБЩЕГО -окна WINDOWS?

Примечания:

  • Из-за более высоких кадров -на -секунд значение, я не могу минимизировать/максимизировать/установить альфу для этих окон, потому что тогда окна будут мерцать. Приложение написано на Win32 C++.
  • Я бы использовал многослойные окна, но из-за функции композиции рабочего стола Windows 7 ее нельзя использовать вне -из -поля -(, а в Windows 8 вы больше не можете использовать DwmEnableComposition для временно и программно отключить композицию)
  • Я мог бы использовать подход многоуровневого окна для Windows XP/2000/7 и т. д. и другой подход для Windows 8 (, если он есть ), хотя я бы предпочел один процесс это работает на всех системах
  • Я мог бы также попытаться «составить» скриншоты, захватив отдельные изображения (рабочего стола,окна, которые необходимо захватить ), и использовать их индекс z -для создания конечного изображения, но из-за требуемого значения кадров -в секунду -этот процесс будет слишком медленным.
7
задан Sucata Mihnea 4 May 2012 в 08:48
поделиться