c # — Захват рабочего стола в реальном времени в память на Windows с рабочим столом Aero

Используя C ++ или C #, я пытаюсь захватить рабочий стол в реальном времени (более 30 кадров в секунду) в память. Так что я могу делать все, что захочу. Но я не могу сделать это на рабочем столе Windows Aero.

Тем не менее, некоторые программы захвата рабочего стола делают захват в реальном времени, даже если Windows Aero включен. Как и Google Chrome Desktop Capture, TeamViewer и Windows Remote Desktop, они могут захватывать весь рабочий стол в режиме реального времени (30 кадров в секунду) в случае воспроизведения видео с быстрым движением на рабочем столе.

Основываясь на информации в Интернете, я попробовал следующий метод:

  1. Захват GDI BitBlt или DirectX GetFrontBuffer
    Это будет иметь очень низкую производительность, если Windows Aero включен.
    Продолжайте снимать с помощью этого метода на долгое время, в конечном итоге Windows Aero отключится Windows.

  2. DWMRegisterThumbnail
    Это будет иметь очень хорошую производительность, даже если Windows Aero включен.
    Однако проблема заключается в том, что это не позволяет получить изображение рабочего стола после того, как все окна являются составными. Таким образом, многослойное окно (всплывающая подсказка, выпадающий список) не будет захвачено.

  3. Magnifier.dll
    Это будет иметь довольно хорошую производительность, даже если Windows Aero включен.
    Тем не менее, magnifier.dll будет непосредственно рисовать в окне, поэтому я не могу напрямую захватить изображение в память.

Если кто-то знает или подсказывает, как они этого добиваются, пожалуйста, дайте мне совет.

5

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …