问题
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.
回答1:
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.
回答2:
I am lost is kinda a big area to see what you don't understand but I will try anyway.
If mean that you don't know what the parameters do in the:
[DllImport ("dwmapi.dll" Entry Point = "# 113", SetLastError = true)]
internal static external DwmpActivateLivePreview uint (uint a, IntPtr b, uint c, uint d);
It is basically like this:
- a: Is the parameter for activating Aero Peek.
- b: Is the handle the AeroPeek focusses too.
- c: Is a tricky one. If you pass a handle of a window to that parameter and the TopMost property is set it will appear on top of the AeroPeek.
- d: I have no idea what d does but the times i have used DwmpActivateLivePreview I always put it on 1.
So the signature is like this:
internal static extern uint DwmpActivateLivePreview(uint active, IntPtr handle, IntPtr onTopHandle, uint d);
The DwmpStartOrStopFlip3D method activates the "Windows + Tab" effect.
[DllImport("dwmapi.dll", EntryPoint = "#105", SetLastError = true)]
internal static extern bool DwmpStartOrStopFlip3D();
Remember though that there is a reason that they are undocumented since they were not meant for us to use them.
If by chance you want to have the Aero Peek effect inside your application you can look at the DwmSetIconicLivePreviewBitmap function located in DWM.
More information here: MSDN: DwmSetIconicLivePreviewBitmap function
来源:https://stackoverflow.com/questions/12719137/what-is-the-aero-function-for-previewing-the-screen-state-behind-a-window