问题标签 [dwm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
78514 浏览

dll - WinXP下如何修复DWMAPI.DLL延迟加载依赖?

我在 WinXP 下构建了一个 .dll,声称它在加载时找不到 DWMAPI.DLL。问题是这个 DLL 是一个 Vista DLL,对于安装了 IE7 的 XP 用户来说,这是一个已知问题。建议卸载 IE7 或通过添加/删除程序修复 .NET Framework。我做了修复,没有任何改变。我不打算卸载 IE7,因为必须有一个更好的解决方案,它不等同于“重新安装 Windows”。

我读过关于试图卸载 IE7 的人的坏消息,所以我不愿意走那条路。

我在 Visual Studio 2003 (7.1) 下使用 C++。我没有看到可能在应用程序启动时强制延迟加载的选项。我只是在创建 DLL 项目时使用了默认设置。我刚才确实找到了一个有趣的选项,Linker->Input->Delay Loaded DLLs,所以我把 DWMAPI.DLL 放在那里强制它被延迟加载。但是,我在链接时得到了这个:

.. 尝试加载我的 DLL 时,它当然没有改变任何事情。为了它,我添加了导致 DWMAPI.DLL 的整个 DLL 树,我得到了相同的消息。(为了记录,它是foundation.dll->shell32.dll->shdocvw.dll->mshtml.dll->ieframe.dll->dwmapi.dll。)

为了更具体地了解我在做什么,我正在编写一个 Maya 插件并在脚本编辑器中获取总是有用的文本:

我最初使用 Dependency Walker 来追踪问题,这就是我找到 DWMAPI.DLL 的原因。这些是取决于给我的消息,而 DWMAPI.DLL 是唯一旁边有一个黄色问号的东西:

杰拉德是对的。事实上,Maya 使用的 PATH 与 Dependency Walker 不同。我的插件加载了另一个 DLL(用于图像处理),它位于 Maya 插件目录中,并且依赖于没有问题地找到它,但 Maya 没有。我必须在 Maya.env 的 PATH 中添加“;plug-ins”。

鉴于这个问题毕竟与 DWMAPI.DLL 无关,但 DWMAPI 是一个常见问题,我将在 Novell 的网站上发布我找到的关于 DWMAPI 问题的最佳链接。基本上大多数程序在depends.exe中都会有这个警告,但是如果旁边有延迟加载图标,并且你确定程序不会直接或间接调用DWMAPI,那就没问题了。问题在别处。如果延迟加载图标不存在,那么您必须查看 Visual Studio 中的 /DELAY 和 /DELAYLOAD 选项。依赖的事实给了我一个“警告”而不是“错误”,这是 DWMAPI 没有被自动加载这一事实的线索。

0 投票
2 回答
8526 浏览

pyqt - Qt:擦除背景(Windows Aero Glass)

更新

有关使用 Qt 和DWM的示例,请参阅在 Windows 上使用模糊替代文字 http://labs.trolltech.com/blogs/wp-content/uploads/2009/09/blurbehind2.png


原始问题:

我想用 Qt 创建一个 Windows Aero Glass 窗口,现在它看起来像这样: 替代文字

但是在调用了一些之后,my_window->repaint()我的窗口标签就坏了: 替代文字

但现在如果我稍微调整窗口大小,它会正确重绘。


问题是:我如何擦除窗口背景,以便小部件将自己绘制在干净的玻璃上?


重现问题的简短代码是(Vista with Aero):

您现在可以单击窗口,也可以单击Alt-Tab几次。

无论如何,使用带有 Aero Glass 的标签不是我需要的,因为 QLabel 不知道如何用一段时间发光(如窗口的标题)来绘制自己。我需要的是一种清洁“玻璃”的通用方法。

0 投票
1 回答
799 浏览

winapi - Vista live thumbnail issue with SetWindowRgn

I know I am probably missing something, but I can't seem to get windows to show the live thumbnail preview correctly when using a window that has a region. When hitting the minimize button the preview will clip to the minimized size (160x25) rather than showing the full preview (like it does with other windows).

Few points to make:

1) The preview works fine in Windows Live Messenger, so Microsoft figured out a way to do it.

2) If I call SetWindowRgn only before a window is visible, it works fine (so its not a fault of the DWM not knowing how to deal with regioned windows.) I can call SetWindowRgn many times before the window is visible and it works great.

3) I need to set the window region after I show the window in case of a resize. So a fix to just set it before will not work.

4) Even when using the default window procedure, the bug still happens. So it is not a fault of processing a message incorrectly (but could be a fault of 'not processing' one :) )

5) When minimizing by clicking the taskbar button (instead of the minimize button in the window), the preview normally works fine (even after setting the region when visible). Again proving that it does not how to deal with the preview.

The bug happens if I set a region after I have shown the window. Code to follow:

0 投票
3 回答
1711 浏览

windows-vista - 在 DWM 中为现有窗口制作“始终位于顶部”缩略图有多容易

我真的很喜欢当你将鼠标悬停在任务栏上的 Vista 中的一个窗口上时,它会给你一个小小的预览。如果是视频,它甚至会在缩略图中播放。

通常我真的希望我能“撕掉”这个小窗口,并将其作为“始终在顶部”的缩略图保留在我的屏幕上。也许它是我正在观看的进度条,也许它是我想要一个小小的预览的视频。

这不是 DWM 使编程变得容易的那种东西吗?这会是在良好的托管 C# 中进行编程的简单尝试 - 还是我最终会陷入棘手的 API 问题?

我对现有的解决方案和关于如何编写这样的代码的指针都感兴趣。

0 投票
3 回答
185 浏览

windows - 窗口管理器在将窗口标记为无响应之前等待多长时间?

窗口在确定窗口无响应并显示无响应的 chrome 之前等待多长时间?仅根据轶事经验,我认为它在 XP 和 Vista 中是不同的,因为 Vista 中的 DWM 和 XP 中的 Explorer shell 处理它们的方式非常不同。

0 投票
2 回答
3119 浏览

windows-7 - Windows 7 中的桌面窗口管理器

Windows 7 中是否有任何新的 DWM API?如果是这样,我在哪里可以找到有关它们的文档?

0 投票
6 回答
1393 浏览

delphi - Vista 应用程序缩略图

根据设计,当应用程序最小化时,Vista 上的工具栏应用程序缩略图不会更新,因为最小化的窗口本身不会重绘。对于我拥有的监控应用程序,在应用程序保持最小化的同时更新应用程序缩略图会很有用。我正在使用 Delphi 2009。任何人都可以为此提出一个好的解决方法吗?

血红蛋白

0 投票
1 回答
8474 浏览

winapi - 在 Vista/Aero 上处理 WM_NCPAINT “破坏” DWM 玻璃渲染

我正在尝试制作一个窗口,该窗口WM_NCPAINT根据用户设置在 Aero/Glass 和自定义渲染框架(通过处理)之间交替。(Windows Vista)。

DwmComposition已启用。我的应用程序提供了玻璃框架,但是一旦我切换设置以触发自定义WM_NCPAINT代码路径然后切换回使用DefWindowProcWM_NCPAINT处理,本机框架现在永远停留在“Vista Basic”样式 - 它不再是半透明的并且标题按钮看起来与普通的 Aero/Glass 不同。

我已经尝试了几乎所有戳窗口的方法,从发送SWP_FRAMECHANGED到更改窗口样式,然后将其更改回来,隐藏它等等,但都无济于事。似乎只要我处理WM_NCPAINT玻璃窗而不是顺从DefWindowProc我的窗户就永远“坏了”。

我在 MSDN 上找到了一个 C#/WPF 示例(代码点 msdn dot microsoft dot com slash chrome),它似乎表明只需停止处理 WM_NCPAINT 并且玻璃会返回,但这似乎不适用于我自己的应用程序。

有没有办法干净地重置这个状态?我的代码在 C++ 中并位于此处:

http://bengoodger.dreamhosters.com/software/chrome/dwm/

0 投票
2 回答
8227 浏览

mfc - 如何正确截屏 Aero/DWM 上的特定窗口

背景信息:我有这个我编写并使用了很长时间的 MFC 应用程序,当用户点击 Print Screen/Alt+Print Screen 键时,它几乎会自动将屏幕截图保存到硬盘上。直到现在我已经使用 Windows 7 RC 几周了,我一直在推迟使用与 Aero 相关的任何东西。

问题:我使用标准的 GetDC/BitBlt 方法来捕获窗口内容。在进行常规全屏抓取时(无论打开多少个窗口等),我对这种方法没有任何问题。当我尝试捕获前景窗口 (Alt+PrintScreen) 时出现问题。这里有两个例子:

示例 1 http://indiecodelabs.com/extern/example1.jpg

示例 2 http://indiecodelabs.com/extern/example2.jpg

正如你所看到的,我在边界应该是垃圾。这在顶部更加明显,我们可以在两个屏幕截图中看到工具栏的一些重复。

我已经在谷歌上搜索了几个小时,我能找到的只是文章说在 DWM 下 BitBtl/GetDC 方法不起作用,但找不到一个解释我们(开发人员)应该做什么的文章在 DWM 上运行时,能够在我们的应用程序中保持相同的功能。

任何帮助,指针,建议将不胜感激。

0 投票
2 回答
1973 浏览

c++ - 检查是否启用了 DWM/Aero,并将该代码保存在 2000/XP/Vista/7 的相同二进制文件中

我知道这个标题没什么意义,主要是因为很难用一行来解释。所以情况如下:

我有一个针对 Windows 2000 和更新版本的二进制程序。现在,我继续添加一些代码来检查用户是否在 Vista/7 下运行,如果是,则检查是否启用了 Aero/DWM。基于此,我将禁用一些与该特定平台无关的东西,并启用一些其他功能。我的主要问题是,为了从 Visual C++ 2008 调用 DwmIsCompositionEnabled,我必须添加 dwmapi.lib 文件并针对它进行编译。在非 Vista 或 7 中运行二进制文件会出现“无法定位组件。应用程序无法启动,因为未找到 dwmapi.dll”错误。当然,这会发生,因为 DWM 是新的并且不适用于旧平台。

那么我的问题是:我有可能以某种方式设法实现这一目标吗?所有操作系统版本的一个二进制文件并包含该 DWM 检查代码?该程序是在 Visual Studio 2008、Visual C++ 下使用 MFC 编写的。