[Beta 探究] 预重置 Longhorn 的 Aero 主题

我想你们之前都测试过 Longhorn build 4074 和它的 DWM…如果没有,那么这是一个很好的机会让你们了解美丽的 Aero 主题。我将通过不在这里记录整个 Longhorn 主题格式来保持这篇文章的简短。

你可能在网上看到过关于如何将 Jade 主题转换为 Aero 的各种文章,但这篇文章有所不同。

如果您以前看过 PDC 2003 演示的视频,那么我相信您已经注意到 DWM 在用户登录时自动打开… 但是怎么做呢?仅仅将 jade.msstyles 重命名为 aero.msstyles 并不能解决问题。在对主题格式和一些主题相关代码进行反向工程之后,我发现主题文件实际上可以用于自动启用 DWM。在 Jade 主题的 globals 部分下,有一个叫做 UsesCompositionBOOL,它恰好是 FALSE。如果 UsesComposition 设置为 TRUE,则无论何时应用主题,它都会通知主题管理器打开 DWM。由于主题是在启动期间应用的,因此对于 UsesComposition 设置为 TRUE 的主题,DWM 将自动启用。

自动启动的 DWM

私有 Aero 主题的另一个功能是 Animated Preview Pane Aurora(APPA)。它使用在 Aero 主题的 PreviewPane.Aurora 部分下定义的 BAML 文件进行显示。它实际上在 Jade 主题中,但 BAML 文件的格式较旧。我们只需将其替换为最新格式的 BAML 文件,然后 APPA 将正确的显示。

Animated Preview Pane Aurora

jade.msstyles 重命名到 aero.msstyles 的技巧接下来您将看到的显然是绿色的 DWM 窗口框架。有两个 Aero 主题,一个公共主题叫 Jade,一个私有主题叫 Glass。差别是显而易见的,虽然两种宝石(如果你认为玻璃是宝石)都是半透明的,Jade(翡翠)是绿色的而 Glass(玻璃)是清亮的。不用说,重命名一个文件不会让你得到 Glass 的资源。我们知道私有 Aero 主题拥有玻璃般外观的资源,但遗憾的是,它们目前没有被泄露。幸运的是,我们拥有 Longhorn build 5048 的 Aero Glass 资源,可以对其进行 Photoshop 处理,以匹配私有 pre-reset Aero 主题。一旦我们将这些 Jade 资源替换为 Glass 资源,我们将看到窗框被截断:

截断的 Explorer 框架
截断的窗口框架

为什么?由于 .msstyles 文件中每个 STREAM 资源的大小在这些 VARIANT 资源中是硬编码的,并且由于 Jade 资源通常比 Glass 资源小,因此加载程序将只加载和显示这些 Glass 资源的一部分。这就是为什么在安装自制 Aero 主题时,会看到几乎完全透明的窗框。一旦我们将这些硬编码的大小更改为 Glass 资源的大小,所有窗框和其他资源将正常显示,如下面的屏幕截图所示:

完全显示的 Explorer 框架
完全显示的窗口框架

在改变了 UsesComposition、用 Glass 资源取代 Jade 资源并改变了硬编码的大小之后,我们现在有了一个非常接近微软的私有 Aero 主题的主题。尽管微软对 Aero 主题严加保密,他们仍然担心可能的泄露(尽管他们采取了保护措施,该主题仍然泄露给了微软以外的人),因此他们想出了一个方法来禁止微软以外的人使用该主题。他们添加了一个叫做 DemoCheck 的东西,用于检查 Microsoft 网络共享上的某一个文件是否存在。概念很简单-如果找到该文件,则此人是在 Microsoft 工作的员工,因为他们可以访问 Microsoft 的网络共享,否则此人不是来自 Microsoft 的人员,不应被允许使用 Aero 主题。该文件的路径是主题 documentation 部分下名为 DemoCheck 的字符串。如果您试图在没有连接 Microsoft 网络共享的情况下应用私有 Aero 主题,您将看到以下错误:

指示 DemoCheck 失败的错误消息

为了使我们重建的 Aero 主题尽可能接近微软的私有 Aero 主题,我们需要在主题 documentation 中添加 DemoCheck 字符串。那么我们有一个问题,我们将如何使用这个主题呢?微软留下了一个叫 DemoCheckOverride 的后门,以为没人会发现。您只需浏览到 HKLM\Software\Microsoft\Windows\CurrentVersion\TheManager,创建一个名为 DemoCheckOverrideRegistry DWORD,并将其值设置为 0xFADE(或十进制 64222)。

现在,我们有了一个完全重建的 Aero 主题,但仍然缺少一些其他 Aero 功能,即 Aero Clock Sidebar 板块、Aero/Jade Preview Pane 渐变、Aero Shell 文件夹图标。这些特性的资源在 WinHEC 版本中都是可用的(实际上是从 4066 开始的所有版本),但是加载它们的代码被删除了。幸运的是,可以对 Microsoft.Windows.WCPClient.dll 进行修补,以加载这些 Aero 资源,就像私有演示版本中的资源一样。

Slate 外观 Clock 板块
Slate 外观图标和背景渐变
Aero 外观 Clock 板块
Aero 外观图标和背景渐变

桌面极光更难修复,因为它是使用过时的 XAML 编译的,其中包含运行时错误,Microsoft 故意对其进行了扭曲。可以通过将 Microsoft.Windows.WCPClient.dll 中的 BAML 替换为正常工作的 BAML 来修复此问题,但不幸的是,Microsoft 没有编写用于呈现该 BAML 的代码,或者完全删除了该代码。我已经编写了一个应用程序,它可以在桌面背景上呈现桌面极光效果,就像 Aero Stars 的呈现一样,下面是它的一个快速演示:

下载

相对于在这里那里提供单独的文件,我为 WinHEC 版本(4074)制作了一个“功能包”或“演示包”。它被称为 RealAero,将定期更新。您可以下载以下最新版本:

请确保浏览到 HKLM\Software\Microsoft\Windows\CurrentVersion\TheManager,创建一个名为 DemoCheckOverrideRegistry DWORD,并将其值设置为 0xFADE(或十进制 64222)。如果您没有,那么当您收到拒绝访问错误时,请不要向我哭诉。

对于桌面极光,您需要下载此程序并双击以启动它。只有安装了上述软件包,它才能工作。

不用说,RealAero 不仅是为版本 4074 而制作的,其他版本最终也将得到支持。我目前正致力于将 Aero 主题引入 M6 版本,如 4039。以下是一些图片:

下页是英文原文 :

[Beta 探究] 预重置 Longhorn 的 Aero 主题》上有2个想法

  1. 文中的“4066年”最后的年字应该是个翻译造成的衍文,删去后文意会变得更为流畅。
    顺便我想咨询一下,文末所附4039截图的任务栏并不是Plex样式,这是通过文中所提到的某些方式实现的吗?期待回复。

发表评论