Снимок экрана конкретного окна (HWND, HW ускорены) - PullRequest
1 голос
/ 26 апреля 2019

Мне нужно сделать снимки / скриншоты определенного окна (HWND), использующего ускорение HW, и записать их в видеопоток.

При использовании BitBlt или PrintWindow Я могузахватывать данные изображения, только если это окно не ускорено как HW, в противном случае я получаю черную текстуру.

Попытка использования недокументированного DwmGetDxSharedSurface User32.dll для получения поверхности DirectXсправиться.Но происходит сбой с ошибкой:

ERROR_GRAPHICS_PRESENT_REDIRECTION_DISABLED - подсистема управления окнами рабочего стола выключена

(Редактировать: не срабатывает для определенных приложений, например «calculator.exe»)

Попытка с использованием недокументированных функций Dwmapi.dll DwmpDxUpdateWindowSharedSurface и DwmpDxGetWindowSharedSurface.Мне удалось получить то, что выглядит как действительный дескриптор поверхности DirectX.( это d3dFormat, информация о ширине и высоте действительна ) Dx's OpenSharedResource не жаловался и ему удалось создать действительное ID3D11Texture2D.Проблема в том, что все байты являются нулями (получая черную текстуру).Возможно, я что-то делаю не так или .. недокументированные функции DWM больше не работают в Windows 10 ...

Редактировать: я могу получить данные изображения для некоторых приложений, таких как проводник Windows, Paintи т. д., но для некоторых, таких как Slack, я получаю все нули / черное изображение.

Редактировать: при захвате, т.е. VLC, я получаю это: enter image description here

Вопрос : Есть ли другой способ захвата данных изображения ускоренного окна HW?

Примечание : Я не хочу захватывать весь рабочий стол.

...