Я пытаюсь понять, как использовать DWM для рендеринга копии окна в моем желаемом месте. Единственное, что я могу найти, чтобы указать DWM где-то рендерить, - это API-интерфейсы эскизов.
Но MSDN Обзор эскизов DWM они специально предупреждают меня:
Примечание эскизы DWM не позволяют разработчикам для создания таких приложений, как Windows Vista Flip3D (WINKEY-TAB) характерная черта. Миниатюры отображаются прямо в окно назначения в 2-D.
Мне сказали, что api эскизов нельзя использовать для создания таких приложений, как Flip3D, но они не говорят, какой api может использоваться для создания приложений, таких как Windows Flip3D.
] Итак, какой API может использоваться для создания приложений, подобных Windows Vista Flip3D?
При работе Windows Desktop Composition приложения рисуют клиентскую область своего окна в свой собственный частный буфер. (Это контрастирует с предыдущими версиями Windows, где каждое приложение рисовало прямо на экране). Это изображение клиентской области затем помещается во фрейм (панель заголовка, кнопки свертывания, развертывания, восстановления и т. Д.), А затем рисуется (т.е. совмещается) на рабочем столе - вместе со всеми другими открытыми окнами:
Потому что это буфер частный, и поскольку видеокарты за последние несколько лет стали мощными при выполнении трехмерных задач, Windows может начать выполнять некоторые изящные трюки. Один из них - возможность манипулировать клиентским окном, изменяя его масштаб и перспективу. Это позволяет активировать api «эскизов» - где Windows будет рисовать копию окна размером с эскиз, где вы ей указываете. Поскольку все это происходит на оборудовании, это происходит очень быстро.
Другая возможность - это Flip3D (Win + Tab). Композитор может выполнять трехмерное позиционирование окна. Опять же, поскольку все это делается аппаратно, это происходит очень быстро.
Я обнаружил, что API-интерфейс сообщает Desktop Window Monitor, чтобы он нарисовал мне эскиз приложения «здесь»:
//Register a thumbnail we want
DwmRegisterThumbnail({in}hwndDestination, {in}hwndSource, out thumbnail);
// Start displaying the thumbnail
DwmUpdateThumbnailProperties({in}thumbnail, {in}thumbproperties);
Но я не могу найти API для скажите DWM нарисовать мне полноразмерную версию окна.
Изменить : разработан для эффективного воспрепятствовать попыткам изменить такие Лицензионные продукты, чтобы нарушить требования защиты контента, указанные в Спецификации HDCP и Правила соблюдения.
Лицензионные продукты должны разрабатываться и производиться таким образом, который явно предназначен для эффективного предотвращения попыток обнаруживать или раскрывать ключи устройств или другие строго конфиденциальные Информация
Лицензионные продукты должны использовать, по крайней мере, следующие методы таким образом, который явно предназначен для эффективного предотвращения попыток чтобы обойти требования защиты контента HDCP Спецификация и правила соответствия
Вы должны винить Sony.