Что такое API для создания приложений типа Flip3D

Я пытаюсь понять, как использовать DWM для рендеринга копии окна в нужное мне место. Единственное, что я могу найти, чтобы указать DWM где-то рендерить, - это API-интерфейсы эскизов.

Но DWM Thumbnail Overview в MSDN специально предупредить меня:

Примечание. Миниатюры DWM не позволяют разработчикам создавать приложения, подобные функции Windows Vista Flip3D (WINKEY-TAB). Миниатюры отображаются непосредственно в окне назначения в 2-D режиме.

Мне сказали, что api эскизов нельзя использовать для создания приложений, подобных Flip3D, но они не говорят, какой api можно использовать для создания приложений, таких как Windows Flip3D.

Итак, какой API можно использовать для создания таких приложений, как Windows Vista Flip3D?


Задний план

Когда Windows Desktop Composition запущена, приложения рисуют клиентскую область своего окна в своем собственном частном буфере. (Это контрастирует с предыдущими версиями Windows, где каждое приложение рисовало прямо на экране). Это изображение клиентской области затем помещается во фрейм (панель заголовка, кнопки свертывания, развертывания, восстановления и т. Д.), А затем рисуется (т. Е. Совмещается) на рабочем столе вместе со всеми другими открытыми окнами:

alt text

Поскольку этот буфер является частным, а видеокарты за последние несколько лет стали мощными при выполнении трехмерных задач, 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 нарисовать мне полноразмерную версию окна.


Изменить: не могу винить Microsoft за защиту от копирования в Windows: архив

  • Поставленные Лицензионные продукты должны соответствовать Правилам соответствия и должны быть спроектированы и изготовлены таким образом, чтобы эффективно воспрепятствовать попыткам модифицировать такие Лицензионные продукты, чтобы нарушить требования к защите контента, указанные в Спецификации HDCP и Правила соответствия.

  • Лицензионные продукты должны быть разработаны и изготовлены таким образом, который явно предназначен для эффективного срыва попыток обнаружения или раскрытия ключей устройств или другой строго конфиденциальной информации.

  • В Лицензионных продуктах должны использоваться, по крайней мере, следующие методы, четко разработанные таким образом, чтобы эффективно препятствовать попыткам нарушить требования к защите контента, указанные в Спецификации HDCP и Правилах соответствия.

Вы должны винить Sony.


person Ian Boyd    schedule 03.10.2010    source источник
comment
Я тоже ищу решение; почему-то я сомневаюсь, что он существует, это Microsoft.   -  person AniDev    schedule 12.12.2010
comment
я сомневаюсь, что существует решение, чтобы расстроить пользователей Microsoft, как того требует лицензионное соглашение (en.wikipedia.org/wiki/High-bandwidth_Digital_Content_Protection)   -  person Ian Boyd    schedule 13.12.2010
comment
Если это побочный эффект HDCP, то почему в OS X есть CGWindowListCreateImage? Я не понимаю, как это связано. Может быть, они просто не хотят, чтобы люди возились с оконной системой. В любом случае выход есть всегда. Просто требуется реверс-инжиниринг DWM.   -  person Jake Petroules    schedule 16.12.2012


Ответы (1)


Взгляните на этот проект: https://github.com/gratianlup/SmartFlip. Он использует WPF и Thumbnail API.

person mhu    schedule 30.01.2014