Мне нужно сделать снимки / снимки экрана определенного окна (HWND), в котором используется ускорение HW, и записать их в видеопоток.
При использовании BitBlt
или PrintWindow
я могу захватывать данные изображения, только если это окно не имеет аппаратного ускорения, иначе я получаю черную текстуру.
Пытался использовать недокументированный DwmGetDxSharedSurface
User32.dll, чтобы получить дескриптор поверхности DirectX. Но не получается с ошибкой:
ERROR_GRAPHICS_PRESENT_REDIRECTION_DISABLED - подсистема управления окнами рабочего стола отключена
(Изменить: не работает для определенных приложений, например "Calculator.exe")
Пробовал использовать недокументированные функции DwmpDxUpdateWindowSharedSurface
и DwmpDxGetWindowSharedSurface
Dwmapi.dll. Мне удалось получить то, что выглядит как действительный дескриптор поверхности DirectX. (это d3dFormat, информация о ширине и высоте действительна) OpenSharedResource
Dx не жаловался и сумел создать действительный ID3D11Texture2D
. Проблема в том, что все байты нули (получается черная текстура). Возможно, я здесь что-то делаю не так или ... недокументированные функции DWM больше не работают в Windows 10 ...
Изменить: я могу получить данные изображения для некоторых приложений, таких как проводник Windows, Paint и т. Д., Но для некоторых, например, Slack, я получаю все нули / черное изображение.
Изменить: при захвате, например, VLC, я получаю следующее:
Вопрос: есть ли другой способ захвата данных изображения ускоренного окна HW?
Примечание: я не хочу снимать весь рабочий стол.