Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the Aero function for previewing the screen state behind a window?

Tags:

c

windows

aero

I have looked everywhere to see how to use Aero in my program. I fail to find any C function that previews the windows behind your own, like File Explorer or any mainstream browser does on their title bars.

Some programs fake it by just adding an image that looks like the Windows 7 title bar -- without Aero -- but I consider it kind of cheating. I found this code on the link below:

[DllImport ("dwmapi.dll" Entry Point = "# 113", SetLastError = true)] 

internal static external DwmpActivateLivePreview uint (uint a, IntPtr b, uint c, uint d); 

[DllImport ("dwmapi.dll" Entry Point = "# 105", SetLastError = true)]

internal static bool external DwmpStartOrStopFlip3D (); 

// Activate Aero peek into the desired Handle 
DwmpActivateLivePreview (1, Handle, 0, 1);

// Disable Aero peek
DwmpActivateLivePreview (0, Handle, 0, 1);

// start or stop the Aero Flip 3D
DwmpStartOrStopFlip3D ();

But have no idea what it means. Is the implementation of Aero Peek, automatically function with the PreviewWindows(or whatever) function?

I'm lost.

This link is in Dutch, just run it through Google Translate

I am not trying to toggle whether or not Aero Peek and/or Flip is activated, or change the icon for my application when the mouse hovers on its taskbar icon. I am instead looking for a function that takes the current screen state of applications behind my own and returns it as an image for display in my application. As a bonus, does the (presumably) returned image come blurred, or is that effect that is separately applied? I think the name for it is Aero Glass.

like image 995
Code Monkey Avatar asked Nov 12 '22 21:11

Code Monkey


1 Answers

As I understand you want to get the state (in terms of the display) of the windows behind your application. You can achieve it by doing the following,

HWND hwnd_behind = GetNextWindow(your_window_handle, GW_HWNDNEXT);

HDC hdc = GetWindowDC(hwnd_behind);

RECT rect;
GetWindowRect(hwnd_behind,rect);

HDC bitmap = MakeABitMapDC();

StretchBlt(bitmap,0,0,dW,dH,hdc,0,0,rect.width,rect.height,SRCCOPY);

You can plug this code into handlers which returns the bitmap when windows asks applications for a preview bitmap.

Left the details like "MakeABitMapDC" for the sake of brevity.

like image 69
nanda Avatar answered Nov 15 '22 13:11

nanda