5

我到处查看如何在我的程序中使用 Aero。我找不到任何可以预览您自己背后的窗口的 C 函数,例如文件资源管理器或任何主流浏览器在其标题栏上所做的。

有些程序只是通过添加一个看起来像 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)运行吗?

我迷路了。

这个链接是荷兰语的,只需通过谷歌翻译运行它

我不想切换是否激活 Aero Peek 和/或 Flip,或者当鼠标悬停在其任务栏图标上时更改我的应用程序的图标。相反,我正在寻找一个函数,它将应用程序的当前屏幕状态置于我自己的后面,并将其作为图像返回以在我的应用程序中显示。作为奖励,(大概)返回的图像是否变得模糊,或者是单独应用的效果?我想它的名字是航空玻璃。

4

2 回答 2

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”之类的细节。

于 2012-10-31T11:00:46.303 回答
0

我迷路是一个很大的领域,可以看到您不了解的内容,但无论如何我都会尝试。

如果意味着您不知道以下参数的作用:

[DllImport ("dwmapi.dll" Entry Point = "# 113", SetLastError = true)] 
internal static external DwmpActivateLivePreview uint (uint a, IntPtr b, uint c, uint d); 

基本上是这样的:

  • a:是激活 Aero Peek 的参数。
  • b:AeroPeek 也关注手柄。
  • c:是一个棘手的问题。如果您将窗口句柄传递给该参数并且设置了 TopMost 属性,它将出现在 AeroPeek 的顶部。
  • d:我不知道 d 做了什么,但我使用 DwmpActivateLivePreview 的次数总是将其设置为 1。

所以签名是这样的:

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 函数。

更多信息在这里:MSDN:DwmSetIconicLivePreviewBitmap 函数

于 2012-10-05T08:01:33.533 回答