Tijdens het werken aan één van mijn projecten had ik een Windows API nodig die de "aero peek" functionaliteit aansprak. Na wat zoekwerk bleek hier geen publieke API voor te zijn. Ik kon slechts een paar sporen en aanwijzingen vinden die naar ongedocumenteerde APIs met deze functonaliteit verwezen. Het betreft de onderstaande APIs.
Update: Stukje over het uitsluiten van venster in Aero peek toegevoegd
Update2: Demo project toegevoegd
Het gaat uiteindelijk om twee ongedocumenteerde APIs genaamd "DwmpActivateLivePreview" en "DwmpStartOrStopFlip3D". Deze zijn te vinden in dwmapi.dll. De eerste API is aanwezig sinds versie 6.1 en de tweede sinds versie 6.0 van dwmapi.dll. Zie ook deze website voor een complete lijst van dwmapi.dll: DWMAPI Functions. Het heeft heel wat zoekwerk en tijd gekost om er achter te komen welke parameters de DwmpActivateLivePreview API nodig had. Ik ga deze manieren in deze post niet beschrijven maar ik kan wel mijn uiteindelijke resultaten posten
.
Het gaat uiteindelijk om dit stukje code (C#):
[DllImport("dwmapi.dll", EntryPoint = "#113", SetLastError = true)]
internal static extern uint DwmpActivateLivePreview(uint a, IntPtr b, uint c, uint d);
[DllImport("dwmapi.dll", EntryPoint = "#105", SetLastError = true)]
internal static extern bool DwmpStartOrStopFlip3D();
DwmpActivateLivePreview(1, Handle, 0, 1);//activeer Aero peek naar de gewenste Handle
DwmpActivateLivePreview(0, Handle, 0, 1);//deactiveer Aero peek
DwmpStartOrStopFlip3D(); // start of stop de Aero 3D flip
De DwmpActivateLivePreview API focused naar het gewenste venster en zorgt dat de content van andere vensters doorzichtig wordt. Hetzelfde effect als je in Windows 7 op de "bureaublad weergeven" knop blijft staan. De DwmpStartOrStopFlip3D API activeert of stopt het flip 3D effect waarin je tussen vensters kan schakelen. Dit effect is te zien als je de "Windows + Tab" toetsencombinatie ingedrukt houd.
Mocht je een venster willen uitsluiten van Aero peek kan je dit in het volgende artikel lezen: http://huddledmasses.org/tag/dwmwa_excluded_from_peek/
Natuurlijk is er ook een klein demo project in C# geschreven om een proof of concept te leveren. Het demo project is hier te downloaden.
Let op! Deze APIs zijn niet gedocumenteerd door Microsoft. Ze kunnen dus op elk moment door een update hernoemd of verwijderd worden. Ik persoonlijk denk dat het bij deze twee niet snel zal gebeuren maar er is geen garantie dat het in de toekomst blijft werken. Ik ben dan ook niet verantwoordelijk voor het gebruik van deze APIs en code.
1 reacties op "Ongedocumenteerde Aero APIs - Update"