我到处看看如何在我的程序中使用Aero。我找不到任何预览你自己后面的窗口的C函数,比如File Explorer或任何主流浏览器在它们的标题栏上。
有些程序通过添加一个看起来像Windows 7标题栏的图像来伪造它 - 没有Aero - 但我认为这有点作弊。我在下面的链接中找到了这段代码:
[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 ();
但不知道这意味着什么。 Aero Peek的实现是否会自动与PreviewWindows(or whatever)
函数一起使用?
我迷路了。
This link是荷兰语,只需通过谷歌翻译
运行我不是要尝试切换Aero Peek和/或Flip是否已激活,或者当鼠标悬停在任务栏图标上时更改应用程序的图标。我正在寻找一个函数,它接受我自己的应用程序的当前屏幕状态,并将其作为图像返回,以便在我的应用程序中显示。作为奖励,(推测)返回的图像是否模糊,或者是单独应用的效果?我认为它的名字是Aero Glass。
答案 0 :(得分:1)
据我了解,您希望获得应用程序背后窗口的状态(就显示而言)。您可以通过执行以下操作来实现它,
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);
您可以将此代码插入处理程序,当Windows向应用程序请求预览位图时返回位图。
为了简洁起见,留下像“MakeABitMapDC”这样的细节。
答案 1 :(得分:0)
我迷失了很多区域,看你不明白但我会尝试。
如果你不知道参数中的参数是什么意思:
[DllImport ("dwmapi.dll" Entry Point = "# 113", SetLastError = true)]
internal static external DwmpActivateLivePreview uint (uint a, IntPtr b, uint c, uint d);
基本上是这样的:
所以签名是这样的:
internal static extern uint DwmpActivateLivePreview(uint active, IntPtr handle, IntPtr onTopHandle, uint d);
DwmpStartOrStopFlip3D方法激活“Windows + Tab”效果。
[DllImport("dwmapi.dll", EntryPoint = "#105", SetLastError = true)]
internal static extern bool DwmpStartOrStopFlip3D();
请记住,有一个原因是它们没有记录,因为它们不适合我们使用它们。
如果您想在应用程序中使用Aero Peek效果,可以查看位于DWM中的DwmSetIconicLivePreviewBitmap函数。