Мне нужно сделать снимки / скриншоты определенного окна (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, я получаю это:
Вопрос : Есть ли другой способ захвата данных изображения ускоренного окна HW?
Примечание : Я не хочу захватывать весь рабочий стол.