none
Получение скриншотов с использованием DXGI RRS feed

  • Вопрос

  • Мне удалось найти в интернете ряд примеров по быстрому получению скриншотов рабочего стола черед DXGI, с использованием DXGI_OUTPUT_DESC.
    Поскольку я не совсем понимаю, как происходит получение этих скриншотов, у меня возник вопрос. Можно ли с помощью DXGI получать скришноты не всего рабочего стола, а отдельных окон (видимых, развёрнутых, перекрытых другими), то есть получать скриншот произвольно выбранного окна, даже если оно перекрыто другими окнами?

Ответы

  • Здравствуйте,

    Насколько мне удалось понять, DXGI  спопсобен захватывать только весь экран, так как предназначен для полноэкранных игр. Как вариант стоит посмотреть opensource приложения, которые имеют такой функционал (к примеру OBS), как он там реализован.

    Возможно стоит посмотреть этот пример:


    Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение" Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    Модератор
  • Согласно той информации, что я нахожу, DXGI 1.6 поддерживается windows10 и поддержка DXGI есть во всех версиях, начиная с win 7, как минимум.
    https://docs.microsoft.com/ru-ru/windows/win32/direct3ddxgi/dxgi-1-6-improvements

    Так что, в теории, пример найденный мной должен прекрасно работать на последних версиях системы (возможно, с небольшими изменениями кода, в зависимости от версии DXGI)

    DXGI конечно никуда не делся. Речь конкретно о захвате содержимого окон с его использованием, через DWM и общую 3D поверхность. На Vista это работало (использовалось для Flip 3D), а потом перестало.

    Реально этот захват работал потому что DWM выводило содержимое окна на некую поверхность которую можно было заполучить. А собственно DXGI к этому прямого отношения не имеет.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    Модератор

Все ответы

  • Здравствуйте,

    Насколько мне удалось понять, DXGI  спопсобен захватывать только весь экран, так как предназначен для полноэкранных игр. Как вариант стоит посмотреть opensource приложения, которые имеют такой функционал (к примеру OBS), как он там реализован.

    Возможно стоит посмотреть этот пример:


    Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение" Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    Модератор
  • Здравствуйте. Благодарю вас за ответ.

    Ещё один теоретический вопрос. Могу ли я обойти это ограничение, используя CreateWindowStationA и/или CreateDesktopA, для создания виртуального рабочего стола? И если да, то как именно это сделать?
  • Мне удалось найти в интернете ряд примеров по быстрому получению скриншотов рабочего стола черед DXGI, с использованием DXGI_OUTPUT_DESC.
    Поскольку я не совсем понимаю, как происходит получение этих скриншотов, у меня возник вопрос. Можно ли с помощью DXGI получать скришноты не всего рабочего стола, а отдельных окон (видимых, развёрнутых, перекрытых другими), то есть получать скриншот произвольно выбранного окна, даже если оно перекрыто другими окнами?
    Вы уверены что это не пример для Vista? Я смутно припоминаю что то такое, оно перестало работать начиная с Windows 7.

    This posting is provided "AS IS" with no warranties, and confers no rights.

    Модератор
  • Согласно той информации, что я нахожу, DXGI 1.6 поддерживается windows10 и поддержка DXGI есть во всех версиях, начиная с win 7, как минимум.
    https://docs.microsoft.com/ru-ru/windows/win32/direct3ddxgi/dxgi-1-6-improvements

    Так что, в теории, пример найденный мной должен прекрасно работать на последних версиях системы (возможно, с небольшими изменениями кода, в зависимости от версии DXGI)
  • Согласно той информации, что я нахожу, DXGI 1.6 поддерживается windows10 и поддержка DXGI есть во всех версиях, начиная с win 7, как минимум.
    https://docs.microsoft.com/ru-ru/windows/win32/direct3ddxgi/dxgi-1-6-improvements

    Так что, в теории, пример найденный мной должен прекрасно работать на последних версиях системы (возможно, с небольшими изменениями кода, в зависимости от версии DXGI)

    DXGI конечно никуда не делся. Речь конкретно о захвате содержимого окон с его использованием, через DWM и общую 3D поверхность. На Vista это работало (использовалось для Flip 3D), а потом перестало.

    Реально этот захват работал потому что DWM выводило содержимое окна на некую поверхность которую можно было заполучить. А собственно DXGI к этому прямого отношения не имеет.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    Модератор