C 在窗口后预览屏幕状态的Aero功能是什么?
我到处寻找,看看如何在我的程序中使用Aero。我找不到任何可以在自己的窗口后面预览窗口的C函数,就像文件浏览器或任何主流浏览器在标题栏上所做的那样 有些程序只是通过添加一个看起来像Windows 7标题栏的图像来伪装它——没有空气——但我认为这是作弊。我在下面的链接中找到了此代码:C 在窗口后预览屏幕状态的Aero功能是什么?,c,windows,aero,C,Windows,Aero,我到处寻找,看看如何在我的程序中使用Aero。我找不到任何可以在自己的窗口后面预览窗口的C函数,就像文件浏览器或任何主流浏览器在标题栏上所做的那样 有些程序只是通过添加一个看起来像Windows 7标题栏的图像来伪装它——没有空气——但我认为这是作弊。我在下面的链接中找到了此代码: [DllImport ("dwmapi.dll" Entry Point = "# 113", SetLastError = true)] internal static external DwmpActivat
[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的实现是否自动与PreviewWindow(或其他)功能一起运行
我迷路了
是荷兰语的,只需通过谷歌翻译就可以了
我不会尝试切换Aero Peek和/或Flip是否已激活,也不会在鼠标悬停在任务栏图标上时更改应用程序的图标。我正在寻找一个函数,它将应用程序的当前屏幕状态置于我自己的屏幕状态之后,并将其作为图像返回,以便在我的应用程序中显示。作为奖励,(大概)返回的图像是模糊的,还是单独应用的效果?我想它的名字是Aero Glass。我迷路了,这是一个很大的领域,可以看到你不明白的地方,但我还是会试试
如果表示您不知道参数在中的作用:
[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);
- a:是激活Aero Peek的参数
- 把手也是AeroPeek聚焦的吗
- c:这是个棘手的问题。如果将窗口句柄传递给该参数,并且设置了最顶端的属性,则该属性将显示在AeroPeek的顶部
- d:我不知道d是做什么的,但我用DWMPActivatePreview的时候总是把它放在1上
所以签名是这样的:
internal static extern uint DwmpActivateLivePreview(uint active, IntPtr handle, IntPtr onTopHandle, uint d);
DwmpStartOrStopFlip3D方法激活“Windows+选项卡”效果
但请记住,它们没有文档化是有原因的,因为它们不是我们要使用的
如果您想在应用程序中实现Aero Peek效果,可以查看位于DWM中的DwmSetIconicLivePreviewBitmap函数
此处的更多信息:据我所知,您希望获得应用程序后面的窗口的状态(显示)。您可以通过执行以下操作来实现:
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向应用程序请求预览位图时,该处理程序将返回位图
为了简洁起见,留下了“MaBabItMMADC”的细节。
我仍然在想为什么这一切在C++中都是很好的,但是我不能让我的生命在C++中工作(通过<代码> LoadLibrary < /代码>和<代码> GeCopTeals< /Cord>)。你指的是当你将鼠标移到缩略图预览上以及在窗口之间按住Alt+Tab键时返回的图像吗?@BoltClock否,我想我要找的更准确的名称是Aero Glass.Ah。Aero Peek是指当您在所有打开的窗口后面显示桌面时,这些图像都是窗口预览。窗框的模糊部分确实是Aero Glass,但我不知道是否有函数返回窗口玻璃区域所覆盖的区域…是的,未记录的函数非常适合玩,但请不要在任何其他地方使用它们。Windows有大量死板和/或无用的代码,因为他们需要让人们的应用程序在他们不听的时候继续运行。不。在非aero模式下,GetWindowDC将返回一些虚拟DC,这些虚拟DC基本上是指该窗口占用的屏幕部分。这意味着,如果窗口1位于顶部,而窗口2位于其下方的同一XY位置,则两个窗口的GetWindowDC将返回一个内容相同的DC,即窗口1的内容。