Как захватить рабочий стол в Windows, чтобы он захватывал как DirectX, так и нормально отображаемые части экрана?

#c #windows #directx #screenshot

#c #Windows #directx #скриншот

Вопрос:

Простой пример — с одной стороны, мы видим, что камера отображается с помощью стандартного программного обеспечения, отображающего «Ввод», с другой стороны (с надписью «Вывод»), отображаемого с помощью некоторых материалов DirectX (по крайней мере, мне так кажется) :

введите описание изображения здесь

Итак, какая функция предоставляется Windows api или DirectX api для захвата таких смешанных сцен?

Комментарии:

1. Трудно понять, что вы ищете. Не могли бы вы, пожалуйста, уточнить?

2. Я не думаю, что вы можете, потому что другой материал просто извлекается из памяти на видеокарте, но материал DirectX или OpenGL не отображается в памяти таким же образом.

3. нажмите stamp, затем вставьте в paint 😉

Ответ №1:

Сервер TightVNC может это сделать, возможно, вы захотите посмотреть, что они делают. При простом просмотре их исходного кода кажется, что они создают виртуальный экран, который отражает основной экран. Однако, в частности, ознакомьтесь с CreateCompatibleDC и CreateDIBSection API

Комментарии:

1. используют ли они зеркальный драйвер?

Ответ №2:

Как я знаю, прямого способа захватить область рендеринга DirectX не существует, хотя мы можем видеть это на экране. Потому что реальное действие рендеринга (или команда рендеринга) происходит на аппаратном уровне. Таким образом, API в стандартном SDK не может знать конечный результат рендеринга, который приводит к черному квадрату.

Возможно, единственный способ сделать это — надеяться на то, что уровень рендеринга (такой как движок DirectX) сам по себе может поддерживать интерфейс вывода, а также базовое действие рендеринга. Поэтому я предлагаю проверить некоторую документацию, чтобы выяснить, действительно ли она существует.

Ответ №3:

DirectX может отображать ограниченный подраздел окна, который вы ему предоставляете, позволяя вам создавать небольшие области DX-содержимого в больших окнах.