Захватить содержимое окна в текстуру - PullRequest
1 голос
/ 13 января 2012

позвольте мне сначала указать основы разработки.Я пишу Windows DLL.Язык программирования, на котором я делаю упор, - это C / C ++.Блоки Asm возможны также, когда требуется для моей задачи.Может быть, даже водитель, но у меня нет никакого опыта с ними вообще.DLL внедряется в хост-процесс.Это всегда среда Directx.Либо Dx9, Dx10 или Dx11 и может работать в полноэкранном или оконном режиме.Метод должен поддерживать windows xp вплоть до windows 7 и компилируется только в x86.

Цель состоит в том, чтобы создать функцию, делающую снимок экрана данного окна процесса.Скриншот никогда не берется из самого хост-процесса.Это всегда другой процесс!Окно может содержать содержимое DirectX или GDI32.Возможно другое содержание возможно, о котором я не думаю в настоящее время (формы окон приходят мне на ум. Я не уверен, как это представляется внутренне).Окна могут быть свернуты.

Этот скриншот должен быть доступным / конвертируемым в текстуру DirectX, такую ​​как Texture2D, в зависимости от среды Directx, в которой я работаю. Сохранения скриншота в виде png / bmp достаточно,так как я знаю, как создать такую ​​текстуру из памяти.

Я уже пробовал старый стиль BitBlt, который не работал на минимизированных приложениях.Минимизированные приложения рисуются, когда я отправляю сообщения WM_PAINT в окно таргетинга.Это не решение для меня, так как мне также нужно идти в ногу с приложениями DirectX, которые не реагируют на такие сообщения.

Может быть, мне нужно подключить каждое отдельное окно DirectX для выполнения моей задачи, чтобы получить прямой доступ к бэкбуферу,В любом случае, я надеюсь на более лучшие методы.

По той причине, что я делаю много скриншотов из нескольких окон, я хотел бы реализовать быстрый метод, который не является таким фальшивым процессором.Копирование из VideoRAM может быть плохим способом, когда есть необходимость в производительности.

Я надеюсь на некоторые идеи, может быть, примеры кода, так как я не знаком со всеми возможностями, которые я мог бы использовать.Я посмотрел на некоторые окна API Apache, но это не поддерживает XP из того, что я мог прочитать.

Заранее спасибо, Фрэнк

...