主题文件格式

本文档讨论主题 (.theme) 文件的格式。 .theme 文件是一个 .ini 文本文件,它分为多个部分,用于指定 Windows 桌面上显示的视觉元素。 在 .ini 文件中,部分名称被放在括号 ([]) 中。

Windows 7 引入了一种新的文件格式 .themepack,以帮助用户共享主题。 只有在 Windows 7 家庭高级版或更高版本中,或者只有在安装了桌面组件的 Windows Server 2008 R2 中,才能在个性化控制面板中选择主题。

本文将讨论以下主题。

创建主题文件

通过 .theme 文件可以更改某些桌面元素的外观。 可以通过两种方式来创建或修改 .theme 文件:

  • 在控制面板中修改个性化或显示设置,并将设置保存为 .theme 文件。 有关说明,请参阅 Windows 帮助。
  • 手动创建 .theme 文件,以便更细致地控制主题的详细信息。

要将主题提供给其他用户,则必须提供 .theme 文件以及背景图片、屏幕保护程序和图标文件。 可以使用主题包来做到这一点。

主题文件的说明

主题文件有许多必需和可选的部分。 下面将介绍 .theme 文件的各个部分,并举例说明了如何指定对不同元素的更改。

[Theme] 部分

注意

本部分是可选的。 如果 .theme 文件中未包含这一部分,则系统将使用默认设置。

[Theme] 部分标识自定义主题的名称,并指定主题的品牌徽标和桌面图标。

[Theme] 部分的第一个部分包含以下两个要素:

元素 说明
DisplayName=名称

DisplayName=@module,-stringId
示例:DisplayName=@themeui.dll,-2013
DisplayName 是在个性化控制面板中显示的主题名称。 它可以是一个字符串,也可以是对本地化名称的引用。
此字段可选。 如果缺少名称,则会使用主题文件名作为主题名称。
BrandImage=图像路径
示例:BrandImage=c:\Fabrikam\brand.png
Windows 7 及更高版本 BrandImage 指定了一个品牌图形文件的路径,该文件会被纳入个性化控制面板的主题预览中。
图标图形必须是 PNG 文件。 图形会被缩放为 80x240 像素,因此建议提供该尺寸的图像。 主题库会尊重品牌图标的透明区域。
此字段可选。 如果缺少徽标,则不会显示任何徽标作为主题图标。

[Theme] 部分的其余部分指定了“计算机”、“我的文档”、“网络”和“回收站”等桌面功能的自定义图标。 如果未指定自定义桌面图标,桌面将显示系统默认桌面图标。

以下是 .theme 文件如何设置计算机图标的两个示例。

[CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\DefaultIcon]
DefaultValue=%ProgramFiles%\Fabrikam\Computer.ico
; Computer
[CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\DefaultIcon]
DefaultValue=%ProgramFiles%\Fabrikam\MyApp.exe,0

以下是 Windows 7 中默认桌面图标的值。

; Computer
[CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\DefaultIcon]
DefaultValue=%SystemRoot%\System32\imageres.dll,-109

; Documents
[CLSID\{59031A47-3F72-44A7-89C5-5595FE6B30EE}\DefaultIcon]
DefaultValue=%SystemRoot%\System32\shell32.dll,-235

; Network
[CLSID\{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}\DefaultIcon]
DefaultValue=%SystemRoot%\System32\imageres.dll,-25

; Recycle Bin
[CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\DefaultIcon]
Full=%SystemRoot%\System32\imageres.dll,-54
Empty=%SystemRoot%\System32\imageres.dll,-55

[Control Panel\Colors] 部分

注意

本部分是可选的。 如果 .theme 文件中未包含这一部分,则系统将使用默认设置。 如果主题使用 Aero 视觉样式,则应避免覆盖本部分中的默认值。

滚动条、文本和按钮等元素的颜色均可自定义。 .theme 文件指定了这些元素要更改的 RGB 值。 这些值会覆盖视觉样式的默认值,并在主题基于 Windows 经典、Windows 7 基本或高对比度主题时使用。

以下是如何设置颜色的示例。

[Control Panel\Colors]
ActiveTitle=10 36 106
Background=166 202 240
Hilight=10 36 106
HilightText=255 255 255
TitleText=255 255 255
Window=255 255 255
WindowText=0 0 0
Scrollbar=212 208 200
InactiveTitle=128 128 128
Menu=212 208 200
WindowFrame=0 0 0
MenuText=0 0 0
ActiveBorder=212 208 200
InactiveBorder=212 208 200
AppWorkspace=128 128 128
ButtonFace=212 208 200
ButtonShadow=128 128 128
GrayText=128 128 128
ButtonText=0 0 0
InactiveTitleText=212 208 200
ButtonHilight=255 255 255
ButtonDkShadow=64 64 64
ButtonLight=212 208 200
InfoText=0 0 0
InfoWindow=255 255 225
GradientActiveTitle=166 202 240
GradientInactiveTitle=192 192 192

[Control Panel\Cursors] 部分

注意

本部分是可选的。 如果 .theme 文件中未包含这一部分,则系统将使用默认光标。

主题还可以改变光标的外观。 为此,需要创建 .cur 文件来替换默认的 Windows 光标。 以下示例来自一个 .theme 文件,该文件为名为 Sports 的主题定义了光标。

[Control Panel\Cursors]
Arrow=%SystemRoot%\sports_arrow.cur
Help=%SystemRoot%\sports_help.cur
AppStarting=%SystemRoot%\sports_wait.ani
Wait=%SystemRoot%\sports_busy.ani
NWPen=%SystemRoot%\sports_pen.cur
No=%SystemRoot%\sports_no.cur
SizeNS=%SystemRoot%\sports_size_ns.cur
SizeWE=%SystemRoot%\sports_size_we.cur
Crosshair=%SystemRoot%\sports_cross.cur
IBeam=%SystemRoot%\sports_beam.cur
SizeNWSE=%SystemRoot%\sports_size_nwse.cur
SizeNESW=%SystemRoot%\sports_size_nesw.cur
SizeAll=%SystemRoot%\sports_move.cur
UpArrow=%SystemRoot%\sports_up.cur
DefaultValue=Windows default

[Control Panel\Desktop] 部分

注意

本部分是必需的。 如果未在 .theme 文件中包含此部分,则系统将忽略主题,也不会在控制面板中显示主题。

可以创建自定义桌面背景,并指定图像文件的路径。 下面的示例显示了如何修改桌面外观。

[Control Panel\Desktop]
Wallpaper=%WinDir%\web\wallpaper\Windows\img0.jpg
; The path to the wallpaper picture can point to a 
; .bmp, .gif, .jpg, .png, or .tif file.

TileWallpaper=0
; 0: The wallpaper picture should not be tiled 
; 1: The wallpaper picture should be tiled 

WallpaperStyle=2
; 0:  The image is centered if TileWallpaper=0 or tiled if TileWallpaper=1
; 2:  The image is stretched to fill the screen
; 6:  The image is resized to fit the screen while maintaining the aspect 
      ratio. (Windows 7 and later)
; 10: The image is resized and cropped to fill the screen while maintaining 
      the aspect ratio. (Windows 7 and later)

[Slideshow] 部分

Windows 7 及更高版本。

注意

本部分是可选的。 如果 .theme 文件中未包含此部分,则系统将使用 [Control Panel\Desktop] 部分中指定的桌面背景图像。 如果包含此部分,则必须在此处指定幻灯片放映设置。

主题背景可以是幻灯片,可以是本地存储的图片,也可以是 RSS 源提供的图片。 文件的 [Slideshow] 部分包含以下属性:

Attribute 说明
Interval=毫秒数 必需。 Interval 是一个数字,用于确定背景变化的频率。 它以毫秒为单位。
Shuffle=0 或 1 必需。 Shuffle 表示是否随机切换背景。
0 = 禁用
1 = 启用
RSSFeed=RSS 源的 URL 如果未指定 ImagesRootPath,则为必填。 RSSFeed 指定用作背景幻灯片放映的 RSS 源。 要让源正常工作,需要引用符合 Windows RSS 平台使用的“enclosures”标准的高分辨率图片。 由于这一限制,包含 RSS 订阅的 .theme 文件必须手动创建。
注意:不能同时指定 RSSFeed 和 ImagesRootPath。
ImagesRootPath=图像文件夹的路径 如果未指定 RSSFeed,则为必填。 ImagesRootPath 指定要用作背景幻灯片的一组图像的路径。 子文件夹中的图像不会包括在幻灯片放映中。
ImagesRootPath 支持路径中的环境变量替换。
注意:不能同时指定 RSSFeed 和 ImagesRootPath。
ItemNPath=特定图像的路径 与 ImagesRootPath 一起使用。
ItemNPath 指定特定图像的路径,这样就可以将幻灯片放映限制为特定的图像,而不是文件夹中的所有图像。 如果为指定路径,则幻灯片中将使用 ImagesRootPath 路径中的所有图片,包括创建和安装主题后添加的图片。
ItemNPath 支持路径中的环境变量替换。 N 等于 0、1、2,以此类推。

以下示例展示了 .theme 文件如何指定幻灯片放映包含本地存储的一组图像。

[Slideshow]
Interval=1800000
Shuffle=1
ImagesRootPath=%SystemRoot%\Web\Wallpaper
[Slideshow]
Interval=1800000
Shuffle=1
ImagesRootPath=%ProgramFiles%\fabrikam\wallpaper
Item0Path=%ProgramFiles%\fabrikam\wallpaper\ocean.jpg
Item1Path=%ProgramFiles%\fabrikam\wallpaper\mountain.jpg
Item2Path=%ProgramFiles%\fabrikam\wallpaper\river.jpg

以下示例是一个 .theme 文件的模板,它使用 RSS 订阅的图片来创建桌面背景幻灯片。 可按照以下步骤自定义模板:

  1. 复制下面的示例并粘贴到文本编辑器中。
  2. 将 {themename} 替换为希望在个性化控制面板主题库中显示的名称。
  3. 将 {rssfeedurl} 替换为兼容 RSS 源的完整路径。
  4. 将更改保存为扩展名为“.theme”的文件。
[Theme]
DisplayName={themename}

[Slideshow]
Interval=1800000
Shuffle=1
RssFeed={rssfeedurl}

[Control Panel\Desktop]
TileWallpaper=0
WallpaperStyle=10
Pattern=

[Control Panel\Cursors]
AppStarting=%SystemRoot%\cursors\aero_working.ani
Arrow=%SystemRoot%\cursors\aero_arrow.cur
Crosshair=
Hand=%SystemRoot%\cursors\aero_link.cur
Help=%SystemRoot%\cursors\aero_helpsel.cur
IBeam=
No=%SystemRoot%\cursors\aero_unavail.cur
NWPen=%SystemRoot%\cursors\aero_pen.cur
SizeAll=%SystemRoot%\cursors\aero_move.cur
SizeNESW=%SystemRoot%\cursors\aero_nesw.cur
SizeNS=%SystemRoot%\cursors\aero_ns.cur
SizeNWSE=%SystemRoot%\cursors\aero_nwse.cur
SizeWE=%SystemRoot%\cursors\aero_ew.cur
UpArrow=%SystemRoot%\cursors\aero_up.cur
Wait=%SystemRoot%\cursors\aero_busy.ani
DefaultValue=Windows Aero
Link=

[VisualStyles]
Path=%SystemRoot%\resources\themes\Aero\Aero.msstyles
ColorStyle=NormalColor
Size=NormalSize
ColorizationColor=0X6B74B8FC
Transparency=1

[MasterThemeSelector]
MTSM=DABJDKT

[Metrics] 部分

注意

本部分是可选的。 如果 .theme 文件中未包含这一部分,则系统将使用默认视觉样式设置。

可以在 .theme 文件中指定系统指标。 系统指标是各种显示元素的尺寸,例如窗口边框宽度、图标高度或滚动条宽度。 NonclientMetrics 和 IconMetrics 值是二进制结构,由 winuser.h 中的 NONCLIENTMETRICS 和 ICONMETRICS 定义。 下面举例说明了如何更改系统指标。

[Control Panel\Desktop\WindowMetrics]

[Metrics]
IconMetrics=76 0 0 0 139 0 0 0 139 0 0 0 1 0 0 0 245
255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 144 1 0 0 0 0 0 0
0 0 0 0 84 97 104 111 109 97 0 119 0 0 7 0 0 0 0 0 216
31 7 0 28 52 1 1 216 31 7 0 176 36 1 1 
NonclientMetrics=84 1 0 0 1 0 0 0 16 0 0 0 16 0 0 0 18
0 0 0 18 0 0 0 245 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0
188 2 0 0 0 0 0 0 0 0 0 0 84 97 104 111 109 97 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0
15 0 0 0 245 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 188 2
0 0 0 0 0 0 0 0 0 0 84 97 104 111 109 97 0 0 80 37 11
0 0 0 0 0 140 221 6 0 227 115 247 119 2 40 11 0 7 0 0
0 18 0 0 0 18 0 0 0 245 255 255 255 0 0 0 0 0 0 0 0 0
0 0 0 144 1 0 0 0 0 0 0 0 0 0 0 84 97 104 111 109 97 0
0 0 0 0 0 60 222 6 0 50 71 252 119 120 1 7 0 76 73 252
119 8 6 7 0 245 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0
144 1 0 0 0 0 0 0 0 0 0 0 84 97 104 111 109 97 0 119 0
0 7 0 120 1 7 0 120 1 7 0 40 37 11 0 120 1 7 0 120 1 7
0 245 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 144 1 0 0 0
0 0 0 0 0 0 0 84 97 104 111 109 97 0 0 92 1 0 0 136 4
0 0 40 37 1 1 0 0 7 0 184 221 6 0 46 75 232 119 

[Visual Styles] 部分

注意

本部分是必需的。 如果未在 .theme 文件中包含此部分,则系统将忽略主题,也不会在控制面板中显示主题。

可以在 .msstyles 文件中提供有关桌面元素大小和颜色的特定信息。 可以用 .msstyles 文件取代 .theme 文件中的颜色和大小部分,从而更细致地修改桌面元素。 这些文件是在 .theme 文件的视觉样式部分中指定的。 下面是视觉样式部分的示例。

[VisualStyles]
Path=%ResourceDir%\Themes\Aero\Aero.msstyles
ColorStyle=NormalColor
Size=NormalSize

在 .msstyles 文件中添加 Path 元素是可选操作。 如果提供了路径,则应删除 .theme 文件中的指标和颜色部分。 删除这些部分后,主题的颜色、字体和大小将以 .msstyles 文件为准,并与 .msstyles 作者的意图一致。 如果未删除指标和颜色部分,可能会导致 Windows 或应用程序出现绘制问题。

Windows Vista / Windows 7:当路径指向 Aero.msstyles 时,可以指定所需的玻璃颜色,如下例所示。

Windows 7:当路径指向 Aero.msstyles 时,还可以指定所需的透明度值,如下例所示。

[VisualStyles]
Path=%SystemRoot%\resources\Themes\Aero\Aero.msstyles
ColorStyle=NormalColor
Size=NormalSize
ColorizationColor=0X7298844C
Transparency=1

如果 ColorizationColor 和 Transparency 值与系统颜色完全匹配,则个性化控制面板会显示该颜色的系统名称。 否则,颜色将被标为“Custom”。

下面显示了 Windows 7 基本主题的 VisualStyles 部分。

[VisualStyles]
Path=%ResourceDir%\Themes\Aero\Aero.msstyles
Composition=0
ColorStyle=NormalColor
Size=NormalSize
ColorizationColor=0x6B74B8FC
Transparency=1

下面显示了 Windows 经典主题的 VisualStyles 部分。

[VisualStyles]
Path=
ColorStyle=@themeui.dll,-854
Size=@themeui.dll,-2019
Transparency=0

下面显示了高对比度黑色主题的 VisualStyles 部分。

[VisualStyles]
Path=
ColorStyle=@themeui.dll,-852
Size=@themeui.dll,-2019
Transparency=0

[Sounds] 和 [AppEvents] 部分(声音)

注意

本部分是可选的。 如果 .theme 文件中未包含这一部分,则系统将使用默认声音设置。

用户可以选择控制面板中的声音图标,将声音与应用程序中发生的事件相关联。 例如,打开应用程序时可以播放 .wav 文件。 .theme 文件可以指定 .wav 文件来替换默认文件。 以下示例演示如何执行此操作。

[AppEvents\Schemes\Apps\.Default\SystemExclamation]
DefaultValue=%WinDir%\media\chord.wav

[AppEvents\Schemes\Apps\.Default\SystemExit]
DefaultValue=%WinDir%\media\tada.wav

[AppEvents\Schemes\Apps\.Default\SystemHand]
DefaultValue=%WinDir%\media\chord.wav

[AppEvents\Schemes\Apps\.Default\SystemQuestion]
DefaultValue=%WinDir%\media\chord.wav

[AppEvents\Schemes\Apps\.Default\SystemStart]
DefaultValue=%WinDir%\media\The Microsoft Sound.wav

[AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin]
DefaultValue=%WinDir%\media\ding.wav

Windows 7 及更高版本:可以指定声音方案名称,而不是单独列出每个声音。

[Sounds]
; "Quirky" sound scheme
SchemeName=@%SystemRoot%\System32\mmres.dll,-819

如上例所示,SchemeName 值指定声音方案名称或本地化声音方案名称。

[Boot] 部分

注意

屏幕保护程序在 Windows 10 Anniversary Update 及更高版本中已被弃用。

注意

本部分是可选的。 如果 .theme 文件中未包含这一部分,则不会使用屏幕保护程序。

在 .theme 文件中,可以指定 Windows 要使用的屏幕保护程序。 下面的示例显示了这种情况。

[boot]
SCRNSAVE.EXE=%WinDir%\System32\bubbles.scr

[MasterThemeSelector] 部分

注意

本部分是必需的。 如果未在 .theme 文件中包含此部分,则系统将忽略主题,也不会在控制面板中显示主题。

.theme 文件的主要主题选择器部分应始终包含一个标签,以表明该文件是有效的。 无法选择该参数的值。 下面显示了这种情况。

[MasterThemeSelector]
MTSM=DABJDKT

主题文件示例

以下示例显示了完整的 .theme 文件。

[Theme]
DisplayName=My Current Theme
BrandImage=c:\Fabrikam\brand.png

; Computer
[CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\DefaultIcon]
DefaultValue=%SystemRoot%\System32\imageres.dll,-109

; Documents
[CLSID\{59031A47-3F72-44A7-89C5-5595FE6B30EE}\DefaultIcon]
DefaultValue=%SystemRoot%\System32\shell32.dll,-235

; Network
[CLSID\{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}\DefaultIcon]
DefaultValue=%SystemRoot%\System32\imageres.dll,-25

; Recycle Bin
[CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\DefaultIcon]
Full=%SystemRoot%\System32\imageres.dll,-54
Empty=%SystemRoot%\System32\imageres.dll,-55

[Control Panel\Cursors]
Arrow=
Help=
AppStarting=
Wait=
NWPen=
No=
SizeNS=
SizeWE=
Crosshair=
IBeam=
SizeNWSE=
SizeNESW=
SizeAll=
UpArrow=
DefaultValue=Windows default

[Control Panel\Desktop]
Wallpaper=%ProgramFiles%\fabrikam\wallpaper\ocean.jpg
TileWallpaper=0
WallpaperStyle=2
Pattern=
ScreenSaveActive=0

[AppEvents\Schemes\Apps\.Default\.Default]
DefaultValue=%WinDir%\media\ding.wav

[AppEvents\Schemes\Apps\.Default\AppGPFault]
DefaultValue=

[AppEvents\Schemes\Apps\.Default\Maximize]
DefaultValue=

[AppEvents\Schemes\Apps\.Default\MenuCommand]
DefaultValue=

[AppEvents\Schemes\Apps\.Default\MenuPopup]
DefaultValue=

[AppEvents\Schemes\Apps\.Default\Minimize]
DefaultValue=

[AppEvents\Schemes\Apps\.Default\Open]
DefaultValue=

[AppEvents\Schemes\Apps\.Default\RestoreDown]
DefaultValue=

[AppEvents\Schemes\Apps\.Default\RestoreUp]
DefaultValue=

[AppEvents\Schemes\Apps\.Default\RingIn]
DefaultValue=

[AppEvents\Schemes\Apps\.Default\Ringout]
DefaultValue=

[AppEvents\Schemes\Apps\.Default\SystemAsterisk]
DefaultValue=%WinDir%\media\chord.wav

[AppEvents\Schemes\Apps\.Default\SystemDefault]
DefaultValue=

[AppEvents\Schemes\Apps\.Default\SystemExclamation]
DefaultValue=%WinDir%\media\chord.wav

[AppEvents\Schemes\Apps\.Default\SystemExit]
DefaultValue=

[AppEvents\Schemes\Apps\.Default\SystemHand]
DefaultValue=%WinDir%\media\chord.wav

[AppEvents\Schemes\Apps\.Default\SystemQuestion]
DefaultValue=%WinDir%\media\chord.wav

[AppEvents\Schemes\Apps\.Default\SystemStart]
DefaultValue=

[AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin]
DefaultValue=%WinDir%\media\ding.wav

[AppEvents\Schemes\Apps\.Default\Close]
DefaultValue=

[Slideshow]
Interval=1800000
Shuffle=1
ImagesRootPath=%ProgramFiles%\fabrikam\wallpaper
Item0Path=%ProgramFiles%\fabrikam\wallpaper\ocean.jpg
Item1Path=%ProgramFiles%\fabrikam\wallpaper\mountain.jpg
Item2Path=%ProgramFiles%\fabrikam\wallpaper\river.jpg

[boot]
SCRNSAVE.EXE=%WinDir%\System32\bubbles.scr

[MasterThemeSelector]
MTSM=DABJDKT
ThemeColorBPP=4

[VisualStyles]
Path=%SystemRoot%\resources\Themes\Aero\Aero.msstyles
ColorStyle=NormalColor
Size=NormalSize
ColorizationColor=0x856E3BA1
Transparency=1

安装主题文件

在初始化 Windows 时,操作系统会枚举 %WinDir%\Resources\ 的一级子目录,以确定可用的主题。 系统默认主题文件位于 %WinDir%\Resources\Themes 中。 用户主题文件存储在 %LOCALAPPDATA%\Microsoft\Windows\Themes 中(或 %SystemDrive%\Users\<用户名>\AppData\Local\Microsoft\Windows\Themes 中)。

.theme 文件具有文件关联;因此,主题安装程序可以调用 .theme 文件上的 ShellExecute 来打开控制面板中的个性化窗口以指定主题。

主题包

Windows 7 及更高版本。 主题包是一个 .cab 文件,其中不仅包含 .theme 文件,还包含在另一台计算机上执行主题所需的文件,如声音文件和图像。 用户可以通过个性化控制面板来创建主题包。

支持的文件类型包括:

文件类型 扩展
主题 .theme
图像 .jpg、.jpeg、.bmp、.dib、.tif、.png
声音 .wav
鼠标光标 .cur、.ani
桌面图标 .ico
品牌徽标 .png

声音等素材应放在 .cab 的根目录下,并直接在 .theme 文件中引用。 例如,如果 .cab 根目录中有一个名为 Alert.wav 的文件,则可以在声音方案中使用它:

[AppEvents\Schemes\Apps\.Default\SystemAsterisk]
DefaultValue=Alert.wav

壁纸图像应采用不同的处理方式。 它们应被提取到 DesktopBackground\ 文件夹中,并由该子目录在 .theme 文件中引用。 例如,如果有一个名为 BestDesktop.jpg 的壁纸,请确保将其提取到 DesktopBackground\,并按照如下方法在 .cab 中引用它:

[Control Panel\Desktop]
; Note the extra `DesktopBackground\` directory.
Wallpaper=DesktopBackground\BestDesktop.jpg

视觉样式概述