您的当前位置:首页雨滴社区RM高级教程

雨滴社区RM高级教程

2020-03-12 来源:乌哈旅游


RM高级教程

写在开篇之前:

Rainmeter(以下简称RM)作为一个基于代码而非图形化界面的开放式桌面美化软件,绝大部分内容都是来自于默默奉献的非盈利制作者(据我所知只有Gnometer、Enigma、ABP是RM官方开发者制作的套装)。一个高素质的RM皮肤制作者群体不仅为推广使用RM提供丰富的内容,反过来也能促进RM在新版本中优化设计、开发更强的功能,可以说是RM的中坚力量

[XANCI的RM高级教程]系列教程面向RM皮肤制作者,以及希望深入了解RM并成为皮肤制作者的广大RM使用者。由于本教程不会提供关于\"RM如何使用\"之类问题的解答,建议新手还是先看看本版的其他入门教程

本教程基于最新版本的Rainmeter 2.1.0 r959英文版,并会随新版本的推出同步更新

中文版虽然汉化了程序界面,但是皮肤代码的编辑仍然是英文(RM在可预见的将来不会将代码部分进行本地化),习惯使用英文指代许多RM名词、术语将为理解使用和编辑RM皮肤带来方便,本系列教程在每个英文术语第一次出现时附加翻译,后面则不再翻译

另外要提到的一个重要的参考是官方的Manual(使用手册,或称帮助文档)

此手册目前汉化工作还在进行中,最新英文版本地址如下

http://rainmeter.net/cms/Manual_beta

当RM使用中遇到任何问题时,希望有条件的同学第一时间先参考Manual中相关条目,因为Manual由RM开发团队编写,其权威性、全面性超过任何网上的教程(本人为了实现一个功能,曾经动用了ColorMatrix,后来发现还有一个ImageTint参数可以使用= =)

绪论

一、RM简介

当安装完RM后启动,第一次安装的话应该不会加载任何皮肤,右键点击任务栏右侧雨滴状的托盘图标,在弹出菜单中点击About(关于),点击最后一个标签页Version(版本)

最上面显示的是你当前的RM版本,以RM 2.1英文版为例

Rainmeter 2.1.0 r959 64-bit (Sep 18 2011)

2.1.0是RM的主版本号,r959是小版本号,2.1.0 r959表示这是2.1.0的正式发布版,在2.0.0发布版之后、2.1.0发布版之前的一系列测试版的版本号则会显示为诸如2.1.0 beta rXXX,代表2.1.0的测试版,XXX编号会小于正式版的959,RM团队会在每个测试版中修正bug,增加新的功能。RM正式版本间的开发期通常比较长,其中新出的皮肤可能部分用到beta版本的功能,建议随时关注官网下载最新的版本

64-bit表示你安装的是适用64位系统的版本,对64位系统的支持较好,有些Plugin(插件)会区分32和64位版本

Sep 18 2011表示当前版本发布的日期,2.1中文版显示的是Sep 20 2011,新版本的翻译工作也是需要时间的,向翻译组的无私奉献致敬!

二、RM路径

还是Version标签页,下面有三个路径,每人的电脑上区别于系统设置、安装时的选择等等

1.Path(主路径):通常位于Program Files\\Rainmeter\\,是RM主程序的安装路径,其下有两个重要文件夹:Addons(附加组件)和Plugins(插件)

2.IniFile(配置文件):通常位于AppData\\Roaming\\Rainmeter\\,其下Rainmeter.ini是当前桌面的配置[注1];Rainmeter.stats是独立的网络流量统计;Themes文件夹下是主题,注意放在RM安装目录下的Themes文件夹中的主题是不会生效的,必须移至这里

3.SkinPath(皮肤):通常位于Documents\\Rainmeter\\Skins\\,存放RM的Skin,同样放在RM安装目录下的Skins文件夹中的皮肤是不会生效的,必须移至这里

有关RM中如何引用各种路径的方法会在后面的教程中介绍

三、RM工作结构

当RM启动时,会先加载Rainmeter.ini,然后启动Rainmeter.ini中记录的皮肤配置文件,这些都加载到电脑内存当中,任何对于Rainmeter调用的文件的修改都需要Refresh(刷新,对应单独的皮肤.ini文件)或者Refresh All(全部刷新,同时会更新目录)

.ini皮肤文件除去文件头外,主体分为两部分:Measure(度量)和Meter(仪表),前者用于获取数据,后者决定内容的显示方式

四、RM编辑、调试工具

对于RM使用的.ini和.inc等文件,用系统自带的记事本就可以修改,另外RM还提供了2个工具

1.RainManager

直接左键点击任务栏RM的托盘图标,或者在RM右键菜单[注2]中点击最上面的Manage(管理)就可打开

Skins标签页用于管理加载、设置皮肤在桌面的显示方式和行为,不再累述;Themes标签页用于管理主题,但过去的RM主题管理器曾经有各种各样的问题和BUG,建议在有关主题的操作中从资源管理器和记事本进行创建、修改主题文件;第三个Settings标签页不常用

2.About

RM右键菜单中Manage下面,也就本篇开头查看版本的地方

Log(日志)标签页用于记录RM的运行状态,皮肤工作不正常时这里也会显示报错信息;Measures标签页用于显示当前加载的各个皮肤中的Measure值;Plugins标签页用于显示当前加载的插件,不重要;最后一个就是Version标签页

五、其他RM编辑系统

所谓RM代码,指RM自身调用的.ini和.inc文件,也是大部分编辑工作的对象,但

是只会写RM代码还是不够的,下面内容虽然不在本教程涉及范围内,还是希望大家尽量学习、掌握

1.图像处理软件

常用的PhotoShop足已,用以绘制皮肤调用的图像,通常使用带Alpha(透明)通道的.png格式

2.Regular Expression(正则表达式)

RM使用的一种查找和替换文本的表示法,最常见于调用WebParser.dll插件的Measure(RegExp=),如天气、RSS浏览器等,大部分此类皮肤的编辑只需参考同类皮肤;其次是一些Measure中复杂的Substitute(替换),不常见

3.Lua Script(Lua脚本)

我们不得不承认RM自身的代码虽然还在不断完善中,但功能是非常有限的,所以有些高级功能的实现需要调用Lua脚本,后面有关Measure的教程会简单提到如何调用Lua脚本

注1:AppData\\Roaming\\Rainmeter\\下的Rainmeter.ini与任意主题文件夹下的Rainmeter.thm都称之为RM配置文件,记录使用的皮肤和皮肤显示行为,加载任一Rainmeter.thm都会覆盖当前的Rainmeter.ini

注2:右键点击RM任务栏托盘图标出现的菜单称之为RM右键菜单,右键点击任意皮肤出现的菜单中下方的Rainmeter里才是RM右键菜单

预告

按计划的教程顺序之后将讲解RM的路径系统、!Bang(指令)系统,再回头讲解RM的主体(配置文件、皮肤文件、Measure和Meter),最后讲解RM高级功能的核心:变量系统

至于为何将路径和指令系统放在皮肤文件之前讲解,本人一直认为RM中UI的设计、Meter,甚至是Measure都不是RM的核心,是可以轻易复制和仿制的,一个套装只要重新绘制UI,简单修改下主题、皮肤中Meter的参数,就可以完全变成另一个样子,核心却没有变化。而路径和指令系统不光是变量系统的基础,也是整个RM代码中常用的、不可或缺的一部分,所以放在实际的Measure和Meter之前

当然大家也可以先跳过路径和指令系统,直接阅读RM主体部分,这样能快速开始皮肤的编辑工作

路径

一、RM三大路径位置

RM三大路径分别是RM主程序安装位置、主题配置文件位置、皮肤配置文件位置,在第一讲绪论中已经简单介绍过

二、RM路径

还是Version标签页,下面有三个路径,每人的电脑上区别于系统设置、安装时的选择等等

1.Path(路径):通常位于Program Files\\Rainmeter\\,是RM主程序的安装路径,其下有两个重要文件夹:Addons(附加组件)和Plugins(插件)

2.Settings(设置):通常位于AppData\\Roaming\\Rainmeter\\,其下Rainmeter.ini是当前桌面的配置;Rainmeter.stats是独立的网络流量统计;Themes文件夹下是主题,注意放在RM安装目录下的Themes文件夹中的主题是不会生效的,必须移至这里

3.Skins(皮肤):通常位于Documents\\Rainmeter\\Skins\\,存放RM的Skin,同样放在RM安装目录下的Skins文件夹中的皮肤是不会生效的,必须移至这里

以本人的电脑为例,贴上About-Version中的内容,本篇之后的所有例子都是基于这三个路径

Rainmeter 2.1.0 r959 64-bit (Sep 18 2011)

Path: D:\\Program Files\\Rainmeter\\

Settings: D:\\AppData\\Roaming\\Rainmeter\\

Skins: D:\\Documents\\Rainmeter\\Skins\\

同时之后的例子中不包括前后引号\",以及注意路径前后是否有\"\\\",正确的路径以蓝色字体标出

二、Skins文件夹

Skins是存放RM使用皮肤的文件夹,注意.ini文件直接放在Skins下是不会被RM识别的,至少要放入一级子文件夹中

Skins下的任意文件夹内的.ini文件同一时间内只能有一个处于活动状态(直接位于该文件夹内的.ini文件,不包括其子文件夹中的.ini文件)

任何包含有效.ini文件的文件夹都可称为一个Config,Config是许多!Bang指令需要的参数之一,一个能正确使用的Config名称不包括\"Skins\\\"及之前的路径、之后的\"\\\"和.ini文件名

例:有如下文件

Skins\\Folder1\\Skin1.ini

Skins\\Folder1\\Folder2\\Skin2.ini

对于Skin1.ini,其正确的Config为\"Folder1\"

对于Skin2.ini,其正确的Config为\"Folder1\\Folder2\"

三、路径的引用

RM中除了直接使用完整的路径名外,还有许多路径变量,属于RM的Built-in Variables(内置变量),下面一一介绍

1.固定的路径,在RM安装完成后就是固定的,因人而异

#PROGRAMDRIVE#

RM安装盘符,例:\"D:\"

#PROGRAMPATH#

RM安装路径,例:\"D:\\Program Files\\Rainmeter\\\"

#SETTINGSPATH#

RM配置文件的路径,例:\"D:\\AppData\\Roaming\\Rainmeter\\\"

#SKINSPATH#

RM皮肤文件的路径,例:\"D:\\Documents\\Rainmeter\\Skins\\\"

#PLUGINSPATH#

RM插件的路径,例:\"D:\\Program Files\\Rainmeter\\Plugins\\\"

#ADDONSPATH#

RM附加组件的路径,例:\"D:\\Program Files\\Rainmeter\\Addons\\\"

2.变化的路径,根据调用位置不同而异

为举例,还是设Skins有以下两个文件

Skins\\Folder1\\Skin1.ini

Skins\\Folder1\\Folder2\\Skin2.ini

#CURRENTPATH#

当前.ini文件的路径

对于Skin1.ini:\"D:\\Documents\\Rainmeter\\Skins\\Folder1\\\"

对于Skin2.ini:\"D:\\Documents\\Rainmeter\\Skins\\Folder1\\Folder2\\\"

#CURRENTFILE#

当前.ini文件的名称

对于Skin1.ini:\"Skin1.ini\"

对于Skin2.ini:\"Skin2.ini\"

#CURRENTCONFIG#

当前.ini文件的Config

对于Skin1.ini:\"Folder1\"

对于Skin2.ini:\"Folder1\\Folder2\"

#ROOTCONFIGPATH#

当前.ini文件到Skins下一级子文件夹的完整路径

对于Skin1.ini:\"D:\\Documents\\Rainmeter\\Skins\\Folder1\\\"

对于Skin2.ini:\"D:\\Documents\\Rainmeter\\Skins\\Folder1\\\"

路径变量在引用时可以组合使用,例:

#CURRENTPATH##CURRENTFILE#

对于Skin1.ini:\"D:\\Documents\\Rainmeter\\Skins\\Folder1\\Skin1.ini\"

对于Skin2.ini:\"D:\\Documents\\Rainmeter\\Skins\\Folder1\\Folder2\\Skin2.ini\"

对于不同的!Bang指令,有些需要的参数是Config,有些需要的参数是.ini文件的完整路径,使用时注意正确引用

!Bang指令

一、介绍

!Bang指令(以下简称!Bang)是RM用来调控RM内部参数、执行外部命令的指令,跟随在触发器之后

在RM 2.1以前的版本中,完整的写法例如刷新当前皮肤:

!RainmeterRefresh

从2.1版本起,指令开头的\"Rainmeter\"可以省略,这个!Bang改为

!Refresh

当然老版本皮肤中带有Rainmeter的!Bang同样也能被识别

本讲内容主要带大家大致了解RM中有哪些!Bang触发器,以及!Bang有哪些功能,特定!Bang的使用方法在后面对应章节会有详细说明

二、触发器

1.[Rainmeter]特有触发器

皮肤.ini文件头[Rainmeter]区内特有的触发器只有一个

OnRefreshAction=

这个触发器会在皮肤第一次加载、以及每次刷新时触发

[Rainmeter]下还可以使用MouseActions(鼠标动作),见下文

2.[Measure]特有触发器

Measure下的触发器又称为IfActions,有三个

IfAboveAction=

当Measure值大于时触发

IfBelowAction=

当Measure值小于时触发

IfEqualAction=

当Measure值等于时触发

以及对应使用的判断值

IfAboveValue=

IfBelowValue=

IfEqualValue=

IfActions使用时有三点需要特别注意

1)IfAction和IfValue的前后顺序没有规定

IfAboveAction=

IfAboveValue=

IfAboveValue=

IfAboveAction=

都是正确的写法

2)对于IfAboveAction,当Measure值大于判断值触发后,只有Measure值变化到小于判断值并再次大于判断值时才会再次触发;对于IfBelowAction,当Measure值小于判断值触发后,只有Measure值变化到大于判断值并再次小于判断值时才会再次触发;对于IfEqualAction,当Measure值等于判断值触发后,只有Measure值变化到大于或小于判断值并再次等于判断值时才会再次触发

3)同一Measure下,可以同时出现IfAboveAction、IfBelowAction、IfEqualAction,但每个触发器只能出现一次,即使使用不同判断值的同一触发器也不能正确被识别

3.[Meter]特有触发器

各类Meter中只有Button(按钮)Meter自带一个触发器

ButtonCommand=

当按下Button时触发

同时各类Meter下也可使用MouseActions

4.MouseActions

MouseActions是一系列识别鼠标动作的触发器,可位于.ini皮肤文件头[Rainmeter]下,对整个皮肤生效,也可位于单独[Meter]下,只对该Meter生效

LeftMouseDownAction=

左键按下时触发,使用这个触发器同时会使皮肤的拖动失效

RightMouseDownAction=

右键按下时触发,使用这个触发器同时会使皮肤的右键菜单失效

MiddleMouseDownAction=

中键按下时触发

LeftMouseUpAction=

左键松开时触发

RightMouseUpAction=

右键松开时触发,使用这个触发器同时会使皮肤的右键菜单失效

MiddleMouseUpAction=

中键松开时触发

LeftMouseDoubleClickAction=

左键双击时触发

RightMouseDoubleClickAction=

右键双击时触发,使用这个触发器同时会使皮肤的右键菜单失效

MiddleMouseDoubleClickAction=

中键双击时触发

MouseOverAction=

鼠标移至上方时触发

MouseLeaveAction=

鼠标离开上方时触发

MouseActionCursor

伴随MouseActions使用的一个参数,默认为1,即鼠标移至有MouseAction区域上方时将变为点击样式,0则为不发生变化

当MouseActionCursor=0在文件头[Rainmeter]下使用时对整个皮肤生效,但在特定[Meter]下加上MouseActionCursor=1可覆盖全局设定

当你在包括有MouseActions或ButtonCommand的Meter或Button上方有另外一个Meter时,位于上方的Meter必须设置MouseActionCursor=0才可使下方的触发器生效,即使上方的Meter没有设置MouseActions

MouseActions使用时还需注意

1)如果皮肤被设置为Click through,整个皮肤上的任何MouseActions都不会触发

2)Left/Right/MiddleMouseDoubleClickAction后面如果没有!Bang,会转而执行对应的Left/Right/MiddleMouseDownAction(如果有的话)

三、!Bangs

以下说明格式为

!Bang [必须参数] (可选参数)

1.!Execute

!Execute是RM中使用最多、功能最强的!Bang,主要有两种使用方法

1)当有多个!Bang需要同时执行时使用,子!Bang用\"[\"、\"]\"分隔

!Execute [!Bang1][!Bang2][!Bang3]

2)执行外部程序,可以包括执行参数,注意被执行的路径前后必须有引号\"

!Execute [\"C:\\Windows\\Notepad.exe\"]

打开记事本

!Execute [\"C:\\Windows\\Notepad.exe\" \"#CURRENTPATH##CURRENTFILE#\"]

使用记事本打开当前.ini

2.RM程序相关!Bangs

!About (TabName)

打开RM右键菜单中的About窗口

!Manage (TabName)

打开RM右键菜单中的Manage窗口,即RainmeterManager

!LsBoxHook [Config]

调用LiteStep lsBox,不常见

!ResetStats

将#SETTINGSPATH#Rainmeter.stats中的数据(网络流量统计)清零

!RefreshApp

相当于RM右键菜单中的Refrash all

!Quit

退出RM

3.变量操作类!Bangs

!SetOption [Meter/Measure] [Option] [Value] (Config)

改变Meter或Measure下的参数

!SetOptionGroup [Group] [Option] [Value] (Config)

改变Meter/Measure Group下的参数

!WriteKeyValue [Section] [Key] [Value] (FileSpec)

将RM使用的.ini或.inc文件内容永久性改写

!SetVariable [Variable] [Value] (Config)

改变变量的值

!SetVariableGroup [Variable] [Value] [Group]

改变Config Group内变量的值

4.Skin操作类!Bangs

!Show (Config)

显示

!Hide (Config)

隐藏

!Toggle (Config)

切换显示或隐藏

!ShowGroup [Group]

显示Config Group

!HideGroup [Group]

隐藏Config Group

!ToggleGroup [Group]

切换显示或隐藏Config Group

!Move [X] [Y] (Config)

移动

!ActivateConfig [Config] [Ini-file]

加载

!DeactivateConfig (Config)

卸载

!DeactivateConfigGroup [Group]

卸载Config Group

!ToggleConfig [Config] [Ini-file]

切换加载或卸载

!Refresh (Config)

刷新

!RefreshGroup [Group]

刷新Config Group

!Update (Config)

更新

!UpdateGroup [Group]

更新Config Group

!Redraw (Config)

重新绘制

!RedrawGroup [Group]

重新绘制Config Group

!SetTransparency [AlphaAmount] (Config)

设置透明度

!SetTransparencyGroup [AlphaAmount] [Group]

设置Config Group透明度

!ShowFade (Config), !HideFade (Config), !ToggleFade (Config)

显示、隐藏、切换显示或隐藏时使用渐变效果

!ShowFadeGroup (Config), !HideFadeGroup (Config), !ToggleFadeGroup (Config)

显示、隐藏、切换显示或隐藏Config Group时使用渐变效果

!ShowBlur (Config)

显示Aero效果

!HideBlur (Config)

隐藏Aero效果

!ToggleBlur (Config)

切换显示或隐藏Aero效果

!AddBlur [Region] (Config)

添加Aero效果区

!RemoveBlur [Region] (Config)

移除Aero效果区

!Draggable [NewSetting] (Config)

设置允许拖动

!DraggableGroup [NewSetting] [Group]

设置Config Group允许拖动

!ZPos [POS] (Config)

设置垂直位置

!ZPosGroup [POS] [Group]

设置Config Group垂直位置

!KeepOnScreen [NewSetting] (Config)

设置钉在桌面

!KeepOnScreenGroup [NewSetting] [Group]

设置Config Group钉在桌面

!ClickThrough [NewSetting] (Config)

设置点击穿透

!ClickThroughGroup [NewSetting] [Group]

设置Config Group点击穿透

!SnapEdges [NewSetting] (Config)

设置边缘吸附

!SnapEdgesGroup [NewSetting] [Group]

设置Config Group边缘吸附

5.Measure操作类!Bangs

!EnableMeasure [Measure] (Config)

启用

!EnableMeasureGroup [Group] (Config)

启用Measure Group

!DisableMeasure [Measure] (Config)

禁用

!DisableMeasureGroup [Group] (Config)

禁用Measure Group

!ToggleMeasure [Measure] (Config)

切换启用或禁用

!ToggleMeasureGroup [Group] (Config)

切换Measure Group启用或禁用

!UpdateMeasure [Measure] (Config)

更新

!UpdateMeasureGroup [Group] (Config)

更新Measure Group

!CommandMeasure [Measure] [Arguments] (Config)

Measure命令,参数视Measure类别不同而异

6.Meter操作类!Bangs

!ShowMeter [Meter] (Config)

显示

!HideMeter [Meter] (Config)

隐藏

!ToggleMeter[Meter] (Config)

切换显示或隐藏

!UpdateMeter [Meter] (Config)

更新

!MoveMeter [X] [Y] [Meter] (Config)

移动

!ShowMeterGroup [Group] (Config)

显示Meter Group

!HideMeterGroup [Group] (Config)

隐藏Meter Group

!ToggleMeterGroup [Group] (Config)

切换显示或隐藏Meter Group

!UpdateMeterGroup [Group] (Config)

更新Meter Group

四、!Bang使用注意

1.当使用OnRefreshAction或IfActions时,慎用刷新类!Bangs,可能造成RM循环刷新进而卡死

2.!Bangs使用时建议所有参数用引号\"括起,因为路径类、公式类参数引用后中间有可能包含空格,导致参数识别错误

3.当参数内一部分时包含引号\"、未配对的括号\"(\"等可能导致识别歧义的符号时,参数两头使用三重引号\"\"\"才能使参数正确识别

Rainmeter.ini/Rainmeter.thm

一、介绍

Rainmeter.ini位于#SETTINGSPATH#,Rainmeter.thm位于#SETTINGSPATH#下各主题文件夹

两者的主要功能均为记录RM以何种方式加载哪些皮肤,区别是前者记录当前或最后一次关闭RM时的状态,后者记录设置好的主题

RM2.1版本以前的网络流量统计也是记录在Rainmeter.ini/.thm中,从2.1版本开始

与主题分离,单独记录在#SETTINGSPATH#下的Rainmeter.stats中

如无需要,Rainmeter.ini/.thm中大部分参数不用手动写上,保持默认即可。部分参数若.thm中没有提到,在RM加载主题时会自动写入.ini中

二、文件头[Rainmeter]的参数

TrayIcon

设为0则不会显示托盘图标

TrayExecuteL, TrayExecuteM, TrayExecuteR, TrayExecuteDL,

TrayExecuteDM, TrayExecuteDR

分别为鼠标左/中/右键单/双击托盘图标的触发器,设置TrayExecuteR会覆盖默认的RM右键菜单,按住Ctrl再点击则会执行默认行为

ConfigEditor

当在RM右键菜单中点击Edit Skin(编辑皮肤)时使用的编辑器,默认为记事本

SkinPath

Skins文件夹的路径,留白则会自动使用#SKINSPATH#

Logging

设为1的话,About对话框Log标签页中的内容都会记录在#SETTINGSPATH#Rainmeter.log中

Debug

设为1的话Logging记录会更详细,适用当前皮肤的运行会拖慢RM运行甚至卡住等恶性情况

DisableVersionCheck

设为1的话RM将不会检查更新,只有下一个版本号的正式发布版才会提醒更新,beta版将不会提醒

三、托盘图标行为[TrayMeasure]的参数

Measure

使用的Measure

TrayMeter

Meter类型只能为HISTOGRAM或BITMAP

TrayColor1

当Meter类型为HISTOGRAM时的背景色

TrayColor2

当Meter类型为HISTOGRAM时的前景色

TrayBitmap

当Meter类型为HISTOGRAM时使用的图像,每帧尺寸必须为16x16,路径从Skins\\后算起。图像格式可以为ico, bmp, gif, png,但只有.ico能正确显示Alpha通道

四、各皮肤配置[ConfigName]的参数

WindowX,WindowY

皮肤的X,Y坐标,左上方为原点,可使用百分号%,表示占整个屏幕的百分比位置

AnchorX, AnchorY

皮肤锚点的X,Y坐标,皮肤左上方为原点,皮肤的X,Y坐标为原点到皮肤锚点的距离

SavePosition

设置为1则RM会记录皮肤的位置并在下一次启动时载入

AlwaysOnTop

皮肤的垂直位置,取值-2对应\"On desktop\",即位于桌面;-1对应\"Bottom\",即位

于其他窗口之下;0对应\"Normal\",即行为与其他窗口相同;1对应\"Topmost\",即位于其他窗口之上;2对应\"Stay topmost\",即始终位于其他窗口之上

Draggable

设置为1则皮肤可拖动

SnapEdges

设置为1则皮肤拖动时会吸附屏幕边缘或其他皮肤边缘,拖动时按住Shift/Ctrl/Alt不会吸附

HideOnMouseOver

设置为1则当鼠标置于皮肤之上时皮肤会隐藏,移开鼠标会重新显示,鼠标移动时按住Shift/Ctrl/Alt皮肤不会隐藏/显示

StartHidden

设置为1则皮肤载入后保持隐藏

NativeTransparency

设置为1来启动本地透明度支持,只当系统为XP时可使用

AlphaValue

设置皮肤透明度(0-255),XP系统需要开启NativeTransparency

FadeDuration

皮肤的渐变时间,单位为毫秒

ClickThrough

设置为1则皮肤不会响应鼠标动作,XP系统需要开启NativeTransparency,按住Shift/Ctrl/Alt皮肤会正常响应

KeepOnScreen

设置为1则皮肤始终会显示在桌面区域内

LoadOrder

皮肤的加载顺序,默认为0,数字大的会显示在上层,同层的按字母表顺序加载,LoadOrder并不影响AlwaysOnTop的设置,AlwaysOnTop设置相同皮肤的显示的才会受LoadOrder影响,另外AlwaysOnTop只影响皮肤的显示,涉及到某些变量时还需考虑LoadOrder

Group

Config Group,多个Group名用\"|\"分隔,同样可以写在皮肤.ini内

皮肤.ini文件的结构

系列教程到了第五讲终于开始讲实际的皮肤文件了= =

RM的各种.ini/.inc/.thm文件都是由一个个[Section]构成的,即用方括号\"[\括起的Section名,上一讲的配置文件.ini/.thm中的Section使用都十分简单,但是Section在皮肤文件结构中是十分重要的一个概念

一、名称固定的Section

1.皮肤文件头[Rainmeter]

1)背景参数

Background

背景图像,如果下面BackgroundMode选择了0而本参数空缺的话,将使用桌面背景

BackgroundMode

0对应使用单一图像;1对应透明(默认);2对应使用颜色;3对应拉伸的图像;4对应平铺的图像

ImageCrop

裁剪图像,格式为ImageCrop=X, Y, W, H, Origin

XY是裁剪的起始坐标,WH是裁剪区域的宽和高,Origin为可选参数:1,2,3,4,5分别对应原点在左上、右上、右下、左下、中央

Greyscale

设置为1则图像将显示为黑白

ImageTint

图像染色

ImageFlip

图像翻转,有效参数:NONE(不翻转);HORIZONTAL(水平);VERTICAL(垂直);BOTH(旋转180度)

ImageRotate

图像旋转,顺时针,单位度

图像变化应用的顺序为ImageCrop -> GreyScale -> ImageTint -> ImageFlip -> ImageRotate

BackgroundMargins

当BackgroundMode=3(即拉伸图像)时使用,格式为BackgroundMargins=L,T,R,B,分别表示左、上、右、下不拉伸而保持原比例的区域宽度

SolidColor

BackgroundMode=2时的主颜色

SolidColor2

BackgroundMode=2时的副颜色,使用此参数会制造一个渐变效果,默认主颜色在左副颜色在右

GradientAngle

修改渐变效果的角度,顺时针,单位度

BevelType

BackgroundMode=2时在色块边缘制造阴影效果,0为没有,1突起,2为下沉

Blur

设置为1开启win7的aero效果

BlurRegion, BlurRegion2, ...

如果没有定义BlurRegion,aero效果将应用于整个皮肤,格式为

BlurRegion=1,x1,y1,x2,y2,矩形区域;BlurRegion=2,x1,y1,x2,y2,r,圆角矩形,r为圆角半径;BlurRegion=3,x1,y1,x2,y2,椭圆区域。以上三组参数,第一个若为0则该BlurRegion无效,x1y1为区域左上角坐标,x2y2为右下角坐标

2)其他参数

Group

Config Group,多个Group名用\"|\"分隔,同样可以写在Rainmeter.ini/.thm内

Update

更新间隔,单位毫秒

TransitionUpdate

Bitmap使用TransitionFrames(切换间隔帧)时的切换间隔,单位毫秒

DynamicWindowSize

设置为1的话皮肤尺寸使用的变量改变时皮肤尺寸会响应变化

DragMargins

设置鼠标在设定区域时不会拖动皮肤,格式为DragMargins=L,T,R,B,分别表示左、上、右、下的区域宽度

OnRefreshAction

皮肤加载或刷新时触发的动作

Author

作者= =

AppVersion

皮肤需要的最低RM版本,格式为Major*1000000 + Minor1*1000 + Minor2,RM2.1是2001000

LocalFont, LocalFont2, ...

允许使用没有安装到windows内的本地字体文件

2.[Metadata]

Metadata下面都是一些打酱油的注释类数据

Name

皮肤名称

Information

皮肤注释,使用\"|\"换行

Version

皮肤版本

License

许可证类型

3.变量区[Variables]

1)直接变量声明

变量名=变量值

引用时使用#变量名#,注意#变量名#是变量值的简单字符串替换

2)@Include

引用其他.ini/.inc中[Variables]区的变量或Style(关于Style的使用下文有说明),需完整路径

当有多个文件需要引用时,使用@Include1=,@Include2=,...

二、名称不定的Section

1.Measures

任何下方有有效Measure=XXX的Section称为一个Measure,名称要保证唯一性

2.Meters

任何下方有有效Meter=XXX的Section称为一个Meter,名称要保证唯一性

3.Styles

不属于Measure和Meter的Section都被判定为Styles

Style可以在Meter中使用,格式

MeterStyle=StyleName

则位于StyleName下的所有参数都会添加到这个Meter下,如有重复参数,Meter下的会覆盖StyleName下的

MeterStyle后也可跟其他Meter,作用同上

关于Measures,Meters

Measure,Meter非简单一一对应关系,可以一对多、多对一,还可有不被Meter使用的Measure(通常是做变量计算的CalcMeasure)与不使用Measure的Meter(固定图片、文字)

下一讲详细解析Measure与Meter

Measures

一、类型

Section下的\"Measure=\"后面就是Measure的类型了,分别如下

Calc

计算

CPU

CPU利用率

FreeDiskSpace

磁盘可用空间

Memory/PhysicalMemory/SwapMemory

总内存/物理内存/虚拟内存使用率

NetIn/NetOut/NetTotal

网络下行速度/网络上行速度/总网络速度

Plugin

使用插件

RegHKey

注册表值

Script

Lua脚本

Time

时间

Uptime

开机时间

二、通用参数

Group

Measure Group,多个Group名用\"|\"分隔

InvertMeasure

设置为1则Measure将测量相反的数值,如在FreeDiskSpace中使用则测量已用磁盘空间

Disabled

设置为1则Measure将被禁用,禁用的Measure不会更新,引用为数值时会返回0,但是引用为字符串时仍会返回一个文本

UpdateDivider

Measure更新间隔的乘子,Measure更新间隔=Update*UpdateDivider。若设置为-1则会禁用更新,该Measure只会在刷新时更新

MaxValue

Measure显示的最大值,默认为1.0,Measure实际值不会改变。在某些Meter例如HISTOGRAM中,这个参数还用来调节显示的比例

MinValue

Measure显示的最小值,默认为0.0,Measure实际值不会改变。在某些Meter例如HISTOGRAM中,这个参数还用来调节显示的比例

Substitute

替换,格式为Substitute=\"find1\":\"replace1\。当需要替换引号\"时,使用单引号',例:Substitute='\"':\"\",将移除所有的引号。单引号只能用于Substitute的一边,两边都使用单引号将无法识别

RegExpSubstitute

设置为1则可在Substitute中使用正则表达式

AverageSize

平均值组大小,例:AverageSize=10,则Measure将返回最近10个值的平均值

三、Measures

1.Calc

Formula

CalcMeasure计算的公式

UpdateRandom

设置为1则Calc使用的随机数在每次更新时都会重新取值,否则在刷新后随机数将固定

HighBound

随机函数使用的上限

LowBound

随机函数使用的下限

算符:

+(加)

-(减)

*(乘)

/(除)

**(乘方)

%(求余)

&(按位与)

|(按位或)

^(按位异或)

~(按位非)

逻辑算符:

<>(不等于)

=(等于)

>(大于)

<(小于)

&&(逻辑与)

||(逻辑或)

函数:

ATAN(x),ASIN(x),ACOS(x),COS(x),SIN(x),TAN(x) - 三角函数

ABS(x) - 绝对值

EXP(x) - e指数

LOG(x) - 以10为底的对数

LN(x) - 自然对数

SQRT(x) - 平方根

SGN(x) - x的符号,当x为正数时返回1,负数时返回-1

FRAC(x) - 返回x的小数部分

TRUNC(x) - 返回x的整数部分

FLOOR(x) - 向下舍入

CEIL(x) - 向下舍入

ROUND(x[,precision]) - 将x舍入到指定的位数

常数:

PI,~3.14159265...

E,~2.71828182...

条件算符:

\"条件\" ? \"条件为真时的表达式\" : \"条件为假时的表达式\"

随机函数:

函数\"RANDOM\"将返回位于\"LowBound\"与\"HighBound\"之间的整数

其他进制:

0b - 二进制,例: 0b110110返回54

0o - 八进制,例: 0o123返回83

0x - 十六进制,例: 0xF1返回241

2.CPU

Processor

设置显示的核心,默认为0,即返回所有核心的平均值

3.FreeDiskSpace

Drive

盘符

Total

设置为1则返回总磁盘空间

Label

设置为1则返回磁盘标签

Type(2.2 r1074以后)

设置为1则返回磁盘类型

IgnoreRemovable

设置为1则忽略可移动磁盘

4.Memory/PhysicalMemory/SwapMemory

Total

设置为1则返回总容量

5.NetIn/NetOut/NetTotal

NetInSpeed/NetOutSpeed/NetTotalSpeed

设置最高速度,单位为比特/秒

Interface

网卡ID,默认为0,即返回所有网卡的总和

Cumulative

设置为1则返回流量总值

6.Plugin

Plugin

使用的插件名称

7.Registry

RegHKey

注册表主键,有效值如下:

HKEY_CURRENT_CONFIG,HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_CLASSES_ROOT,HKEY_PERFORMANCE_DATA,HKEY_DYN_DATA

RegKey

RegValue

键值

8.Script

ScriptFile

Lua脚本名

9.Time

Format

时间格式,例:Format=\"%H:%M:%S\"

TimeZone

时区,例:TimeZone=+8.0

DaylightSavingTime

夏令时

时间格式代码:

%a - 星期名缩写

%A - 星期名全称

%b - 月缩写

%B - 月全称

%c - 日期与时间

%d - 月天数 (01 - 31)

%H - 24小时制 (00 - 23)

%I - 12小时制 (01 - 12)

%j - 年天数 (001 - 366)

%m - 月 (01 - 12)

%M - 分 (00 - 59)

%p - 12小时制的A.M./P.M.

%S - 秒 (00 - 59)

%U - 年星期数,以星期日为第一天 (00 - 53)

%w - 星期名 (0 - 6,星期天为0)

%W - 年星期数,以星期一为第一天 (00 - 53)

%x - 日期

%X - 时间

%y - 年 (00 - 99)

%Y - 年

%z,%Z - 时区名与时区缩写

%% - 百分号

# - 在格式代码前加\"#\"将移除数字前面的0

10.Uptime

Format

时间格式,例:Format=\"%4!i!d %3!i!:%2!02i!\"

AddDaysToHours

如果%4(天)没有包括在格式内,3%(时)将会加上 天*24,这个参数设置为0则天不会加到小时上

时间格式代码:

%4 - 天

%3 - 时

%2 - 分

%1 - 秒

!i! - 在格式代码后加\"!i!\"将移除数字前面的0

!02i! - 在格式代码后加\"!02i!\"将显示数字前面的0

Meters

一、类型

Section下的\"Meter=\"后面是Meter的类型,分别如下

STRING

文本

BAR

ROUNDLINE

圆环

IMAGE

图像

BITMAP

多帧图像

ROTATOR

旋转图像

LINE

线图

HISTOGRAM

直方图

BUTTON

按钮

二、通用参数

MeterStyle

使用的Style,Style中的参数可由在Meter下再次声明覆盖

MeasureName

使用的Measure

X

X坐标,可在结尾使用\"r\"表示与上一个Meter的X坐标的距离,\"R\"表示与上一个Meter右端的距离

Y

Y坐标,可在结尾使用\"r\"表示与上一个Meter的Y坐标的距离,\"R\"表示与上一个Meter下端的距离

W

宽度,在诸如IMAGE或STRING等Meter中有时可不定义

H

高度,用法同宽度

X,Y,W,H后面都可以跟表达式,需要用括号,例:X=(#SCREENAREAWIDTH#-200)

Hidden

设置为1则Meter隐藏

UpdateDivider

Meter更新间隔的乘子,Meter更新间隔=Update*UpdateDivider

SolidColor

背景主颜色

SolidColor2

背景副颜色,使用此参数会制造一个渐变效果,默认主颜色在左副颜色在右

GradientAngle

修改渐变效果的角度,顺时针,单位度

BevelType

在背景色块边缘制造阴影效果,0为没有,1突起,2为下沉

AntiAlias

设置为1则使用反锯齿效果

ToolTipText

提示文本,即鼠标移至Meter上会出现的工具提示,可使用1%,2%,3%,...代表Meter使用的Measure的值

ToolTipTitle

提示标题,黑体显示,只有一行所以无法使用#CRLF#换行

ToolTipIcon

提示图标,必须在设置提示标题后才可使用,有效值:INFO,WARNING,ERROR,QUESTION,SHIELD

ToolTipType

提示框类型,0为普通矩形,1为气球形

ToolTipWidth

提示框最大宽度,超出宽度的文本将自动换行

ToolTipHidden

设置为1则提示框隐藏

TransformationMatrix

变形矩阵

三、Meters

1.STRING

String不一定必须与Measure绑定,可用\"Text=\"显示固定文字,也可在\"Text=\"中用\"%1,%2,...\"混合显示Measure值与固定文字。当你只想单纯显示Measure值时,\"Text=\"参数可省略

MeasureName,MeasureName2,...

String可以使用多个Measure

FontColor

文字颜色

FontFace

文字字体

FontSize

文字大小

Prefix

前缀

Postfix

后缀

StringAlign

文本对齐方式,有效参数:LEFT(居左);CENTER(居中);RIGHT(居右)

StringStyle

文本格式,有效参数:NORMAN(正常);BOLD(粗体);ITALIC(斜体);BOLDITALIC(粗斜体)

StringEffect

文本特效,有效参数:NONE(无);SHADOW(阴影);BORDER(描边)

FontEffectColor

StringEffect使用的颜色

StringCase

字母大小写,有效参数:NONE(无);UPPER(大写);LOWER(小写);PROPER(合适,即首字母大写)

Scale

Measure值缩放比例,Measure值将除以这个参数,即设置为100则Measure值缩小100倍。若参数值为小数,缩放后的Measure值将显示为带一位小数

AutoScale

Measure值自动缩放,单位为T,G,M,k等,使用此参数将覆盖Scale的设置,有效值为:0(默认);1(单位倍率为1024);1k(单位倍率为1024,最小单位k);2(单位倍率为1000);2k(单位倍率为1024,最小单位k)

Percentual

设置为1则Measure值将按百分比显示

NumOfDecimals

Measure值小数点后位数

Text

文本,使用%1,%2,...代表MeasureName,MeasureName2,...

ClipString

裁剪文本,该Meter必须指定W与H。当一行文本超过宽度时若高度足够显示下一行则自动换行,若不够显示则文本末尾用\"...\"代替

Angle

文本旋转角,顺时针,单位弧度

2.BAR

Bar显示为水平或者垂直的一个矩形条,填充的长度对应Measure值。Bar相应的Measure取值应当在0.0到1.0之间,或者MaxValue 与MinValue均已指定

BarImage变化应用的顺序为ImageCrop -> GreyScale -> ImageTint -> ImageFlip -> ImageRotate

BarColor

颜色

BarImage

填充Bar的图像,使用此参数将覆盖BarColor的设置,同时覆盖W与H的设置并以图像原始尺寸显示

BarBorder

当使用BarImage时,Bar两端始终显示的图像宽度,对垂直Bar即为上下两端,对水平Bar即为左右两端

ImageCrop

裁剪图像,格式为ImageCrop=X, Y, W, H, Origin

XY是裁剪的起始坐标,WH是裁剪区域的宽和高,Origin为可选参数:1,2,3,4,5分别对应原点在左上、右上、右下、左下、中央

Greyscale

设置为1则图像将显示为黑白

ImageTint

图像染色

ImageFlip

图像翻转,有效参数:NONE(不翻转);HORIZONTAL(水平);VERTICAL(垂直);BOTH(旋转180度)

ImageRotate

图像旋转,顺时针,单位度

ColorMatrixN

颜色矩阵

ImageAlpha

图像透明度,0-255

BarOrientation

Bar方向,有效参数:HORIZONTAL(水平);VERTICAL(垂直)

Flip

设置为1则翻转Bar的指向

3.ROUNDLINE

Roundline显示为绕一点旋转的线段,旋转的角度对应Measure值,默认起始方向为正右,顺时针旋转。若Meter的W和H未指定,则旋转原点为Meter的X,Y坐标;若W和H已指定,则旋转原点为W,H所固定的矩形中心。Roundline相应的Measure取值应当在0.0到1.0之间,或者MaxValue 与MinValue均已指定

LineColor

线颜色

LineWidth

线宽度

LineLength

线长度,从原点计算,无论LineStart为多少

ControlLength, LengthShift

若ControlLength设置为1则Measure值控制LineLength从LineLength到LineLength+LengthShift

LineStart

线段起点到原点的距离

ControlStart, StartShift

若ControlStart设置为1则Measure值控制LineStart从LineStart到LineStart+StartShift

StartAngle

起始角,顺时针,单位弧度

RotationAngle

当Measure取最大值时的旋转角,负值为逆时针旋转

ControlAngle

若ControlAngle设置为0则旋转角固定为RotationAngle,否则Measure值控制旋转角从0到RotationAngle

ValueRemainder

Measure值求余的除数,即Meter使用的值为Measure值对ValueRemainder求余的余数

Solid

设置为1则Meter将填充从StartAngle到RotationAngle的区间以绘制一个饼图

4.IMAGE

Image不一定必须与Measure绑定,可显示固定图像;当与Measure绑定时,会尝试显示文件名与Measure值对应的图像

Image变化应用的顺序为ImageCrop -> GreyScale -> ImageTint -> ImageFlip -> ImageRotate

MeasureName,MeasureName2,...

Image可以使用多个Measure

ImageName

Image文件名,可使用%1,%2,...代表MeasureName,MeasureName2。若ImageName未指定,Meter会尝试使用MeasureName的值为名称的png图像

Path

从当前皮肤文件夹起图像的路径

PreserveAspectRatio

设置为1则图像在缩放时将保持宽高比

ScaleMargins

设置当图像进行缩放时保持原比例的区域,格式为ScaleMargins=L,T,R,B,分别表示左、上、右、下不拉伸而保持原比例的区域宽度

ImageCrop

裁剪图像,格式为ImageCrop=X, Y, W, H, Origin

XY是裁剪的起始坐标,WH是裁剪区域的宽和高,Origin为可选参数:1,2,3,4,5分别对应原点在左上、右上、右下、左下、中央

Greyscale

设置为1则图像将显示为黑白

ImageTint

图像染色

ImageFlip

图像翻转,有效参数:NONE(不翻转);HORIZONTAL(水平);VERTICAL(垂直);BOTH(旋转180度)

ImageRotate

图像旋转,顺时针,单位度

Tile

设置为1则图像将在W,H所固定的矩形内平铺(重复)

ColorMatrixN

颜色矩阵

ImageAlpha

图像透明度,0-255

5.BITMAP

Bitmap将图像分割成相等大小的帧,每帧对应绑定的Measure的一个值。当BitmapExtend=0时Bitmap相应的Measure取值应当在0.0到1.0之间,或者MaxValue 与MinValue均已指定,此时Bitmap会以每帧显示对应Measure取值的区间,例当帧数为5时第1帧在对应Measure值为0%-19%时显示,第2帧在对应Measure值为20%-39%时显示

BitmapImage变化应用的顺序为GreyScale -> ImageTint -> ImageFlip

BitmapImage

Bitmap使用的图像,帧的排列根据图像长宽比例自动选定

BitmapFrames

Bitmap的总帧数

BitmapTransitionFrames

Bitmap变换帧数,即当Measure值变化时,对应的两帧之间过渡的帧数,一个Bitmap内所有正常帧之间的变换帧数量是一致的。皮肤[Rainmeter]Section的TransitionUpdate参数决定每个变换帧显示的时间,即总的变换时间为TransitionUpdate*TransitionUpdate。注意BitmapFrames总是表示总帧数,例当你需

要10个用于显示数值的正常帧,变换帧数为4,则BitmapFrames应设置为50,BitmapTransitionFrames设置为4

BitmapZeroFrame

设置为1则第一帧只当Measure值为零时显示,否则所有帧线性对应Measure值

BitmapExtend

设置为1则Bitmap会尝试以帧数为进制显示数值,即若Bitmap的10帧分别代表0-9,数值会以相应的帧显示

BitmapDigits

Bitmap显示字符的位数,空位将以第一帧表示,只当BitmapExtend=1时有效

BitmapAlign

Bitmap显示字符的对齐方式,有效参数:LEFT(居左);CENTER(居中);RIGHT(居右),只当BitmapExtend=1时有效

BitmapSeparation

当BitmapDigits大于1时两个字符间的间距,可为负数

Greyscale

设置为1则图像将显示为黑白

ImageTint

图像染色

ImageFlip

图像翻转,有效参数:NONE(不翻转);HORIZONTAL(水平);VERTICAL(垂直);BOTH(旋转180度)

ColorMatrixN

颜色矩阵

ImageAlpha

图像透明度,0-255

6.ROTATOR

Rotator显示为绕一点旋转的图像,旋转的角度对应Measure值,默认起始方向为正右,顺时针旋转。Rotator相应的Measure取值应当在0.0到1.0之间,或者MaxValue 与MinValue均已指定

Image变化应用的顺序为ImageCrop -> GreyScale -> ImageTint -> ImageFlip ->

ImageRotate

ImageName

旋转的图像

ImageCrop

裁剪图像,格式为ImageCrop=X, Y, W, H, Origin

XY是裁剪的起始坐标,WH是裁剪区域的宽和高,Origin为可选参数:1,2,3,4,5分别对应原点在左上、右上、右下、左下、中央

Greyscale

设置为1则图像将显示为黑白

ImageTint

图像染色

ImageFlip

图像翻转,有效参数:NONE(不翻转);HORIZONTAL(水平);VERTICAL(垂直);BOTH(旋转180度)

ImageRotate

图像旋转,顺时针,单位度

ColorMatrixN

颜色矩阵

ImageAlpha

图像透明度,0-255

OffsetX, OffsetY

旋转原点在图像上的X,Y坐标,注意Rotator的旋转原点始终为Meter的X,Y坐标,OffsetX,OffsetY则确定旋转原点与图像的相对位置

StartAngle

起始角,顺时针,单位弧度

RotationAngle

当Measure取最大值时的旋转角,负值为逆时针旋转

ValueRemainder

Measure值求余的除数,即Meter使用的值为Measure值对ValueRemainder求余的余数

7.LINE

Line按时间显示绑定的Measure值的变化曲线,一个Meter可以显示多个Line

LineCount

曲线数量,注意其后的三个参数在表示第一条曲线时不使用数字(MeasureName,LineColor,Scale)

MeasureName,MeasureName2,...

曲线使用的Measure

LineColor,LineColor2,...

曲线颜色

Scale,Scale2,...

Measure值的缩放倍数,Measure值将乘以这个参数

AutoScale

设置为1则Meter将自动缩放以保持最大值正确显示,设置为0则Meter将根据所有Measure的Maxvalue中的最大值缩放比例

LineWidth

曲线宽度

HorizontalLines

设置为1则在背景上显示水平参考线

HorizontalLineColor

水平参考线颜色

Flip

设置为1则翻转Line的指向

8.HISTOGRAM

Histogram按时间显示绑定的Measure值的变化直方图,即填充了曲线下方区域的Line,一个Meter最多显示两个Histogarm

Image变化应用的顺序为ImageCrop -> GreyScale -> ImageTint -> ImageFlip -> ImageRotate

SecondaryMeasureName 或 MeasureName2

副Histogarm使用的Measure

PrimaryColor

主Histogarm颜色

SecondaryColor

副Histogarm颜色

BothColor

主副Histogarm重叠区域颜色

PrimaryImage

主Histogram图像,使用此参数将覆盖PrimaryColor的设置。当定义了副Histogarm的Measure后若定义PrimaryImage则必须同时定义SecondaryImage与BothImage,而非SecondaryColor与BothColor

SecondaryImage

副Histogram图像

BothImage

主副Histogarm重叠区域图像

PrimaryImageCrop, SecondaryImageCrop, BothImageCrop

裁剪图像,格式为ImageCrop=X, Y, W, H, Origin

XY是裁剪的起始坐标,WH是裁剪区域的宽和高,Origin为可选参数:1,2,3,4,5分别对应原点在左上、右上、右下、左下、中央

PrimaryGreyscale, SecondaryGreyscale, BothGreyscale

设置为1则图像将显示为黑白

PrimaryImageTint, SecondaryImageTint, BothImageTint

图像染色

PrimaryImageFlip, SecondaryImageFlip, BothImageFlip

图像翻转,有效参数:NONE(不翻转);HORIZONTAL(水平);VERTICAL(垂直);BOTH(旋转180度)

PrimaryImageRotate, SecondaryImageRotate, BothImageRotate

图像旋转,顺时针,单位度

PrimaryColorMatrixN, SecondaryColorMatrixN, BothColorMatrixN

颜色矩阵

PrimaryImageAlpha, SecondaryImageAlpha, BothImageAlpha

图像透明度,0-255

AutoScale

设置为1则Meter将自动缩放以保持最大值正确显示,设置为0则Meter将根据所有Measure的Maxvalue中的最大值缩放比例

Flip

设置为1则翻转Histogram的指向

9.BUTTON

Button不能与任何Measure绑定,自带正常、按下、悬浮三种状态以及一个触发器

ButtonImage变化应用的顺序为GreyScale -> ImageTint -> ImageFlip

ButtonImage

Button使用的图像,图像分为尺寸相同的三帧,帧的排列根据图像长宽比例自动选定,依次对应正常、按下、悬浮的按钮图像

ButtonCommand

Button按下的触发器

Greyscale

设置为1则图像将显示为黑白

ImageTint

图像染色

ImageFlip

图像翻转,有效参数:NONE(不翻转);HORIZONTAL(水平);VERTICAL(垂直);BOTH(旋转180度)

ColorMatrixN

颜色矩阵

ImageAlpha

图像透明度,0-255

变量

一、狭义变量

狭义变量即Variable

1.内置变量

除了在第二讲介绍过的路径变量外

1.固定的路径,在RM安装完成后就是固定的,因人而异

#PROGRAMDRIVE#

RM安装盘符,例:\"D:\"

#PROGRAMPATH#

RM安装路径,例:\"D:\\Program Files\\Rainmeter\\\"

#SETTINGSPATH#

RM配置文件的路径,例:\"D:\\AppData\\Roaming\\Rainmeter\\\"

#SKINSPATH#

RM皮肤文件的路径,例:\"D:\\Documents\\Rainmeter\\Skins\\\"

#PLUGINSPATH#

RM插件的路径,例:\"D:\\Program Files\\Rainmeter\\Plugins\\\"

#ADDONSPATH#

RM附加组件的路径,例:\"D:\\Program Files\\Rainmeter\\Addons\\\"

2.变化的路径,根据调用位置不同而异

为举例,还是设Skins有以下两个文件

Skins\\Folder1\\Skin1.ini

Skins\\Folder1\\Folder2\\Skin2.ini

#CURRENTPATH#

当前.ini文件的路径

对于Skin1.ini:\"D:\\Documents\\Rainmeter\\Skins\\Folder1\\\"

对于Skin2.ini:\"D:\\Documents\\Rainmeter\\Skins\\Folder1\\Folder2\\\"

#CURRENTFILE#

当前.ini文件的名称

对于Skin1.ini:\"Skin1.ini\"

对于Skin2.ini:\"Skin2.ini\"

#CURRENTCONFIG#

当前.ini文件的Config

对于Skin1.ini:\"Folder1\"

对于Skin2.ini:\"Folder1\\Folder2\"

#ROOTCONFIGPATH#

当前.ini文件到Skins下一级子文件夹的完整路径

对于Skin1.ini:\"D:\\Documents\\Rainmeter\\Skins\\Folder1\\\"

对于Skin2.ini:\"D:\\Documents\\Rainmeter\\Skins\\Folder1\\\"

RM还有以下内置变量:

#CRLF#

换行

#CURRENTSECTION#

引用位置的[Section]名,如果在[Variables]下使用,不管相应的变量在何处引用,都会返回\"Variables\"

#WORKAREAX#

工作区X坐标

#WORKAREAY#

工作区Y坐标

#WORKAREAWIDTH#

工作区宽度

#WORKAREAHEIGHT#

工作区高度

#SCREENAREAWIDTH#

屏幕宽度

#SCREENAREAHEIGHT#

屏幕高度

以下4个变量内定属性就为Dynamic(动态的),使用时必须在对应Measure或Meter中添加\"DynamicVariables=1\"

#CURRENTCONFIGWIDTH#

当前皮肤宽度

#CURRENTCONFIGHEIGHT#

当前皮肤高度

#CURRENTCONFIGX#

当前皮肤X坐标

#CURRENTCONFIGY#

当前皮肤Y坐标

2.自定义变量

在Section[Variables]声明

VariableName=VariableValue

引用时用#VariableName#

注意RM在识别变量名时为从左到右一次性识别,如有

A=X

BX=Z

则\"#B#A##\"只能识别为\"#BX#\"而非\"Z\"

Variable的使用方法除了简单替代外,还可以通过!Bang指令

\"!SetVariable\来改变变量的值,即DynamicVariable(动态变量)。使用动态变量的Measure或Meter必须添加\"DynamicVariables=1\"才可在变量被!Bang改变后响应变量的改变

若有变量通过@Include由多个Config使用,每个Config中的变量值都是独立的,改变某个或某些Config中变量的值不影响其他Config中同名变量的值

二、广义变量

任何可以自行变化或由!Bang操作变化的值都可以称为广义的变量

Measure除了可以在Meter中由\"MeasureName=\"引用外,还可以作为变量使用

在其他Measure中使用时直接使用变量名,例:

1. [TopName]

2. Measure=Calc

3. Formula=MTopName

复制代码

当Measure作为动态变量在其他Measure中使用时用方括号,并加上\"DynamicVariables=1\",例:

1. [TopName]

2. Measure=Calc

3. Formula=[MTopName]

4. IfAboveValue=1

5. IfAboveAction=!RainmeterSetVariable Something [MTopName]

6. DynamicVariables=1

复制代码

当Measure在Meter的\"MeasureName=\"之外使用时用方括号,并加上\"DynamicVariables=1\",例:

1. [MeterSecond]

2. Meter=ROUNDLINE

3. MeasureName=MeasureSecondArc

4. StartAngle=[MeasureSecondAngle]

5. DynamicVariables=1

复制代码

三、变量操作!Bang

1.!SetVariable,!SetVariableGroup

直接改变变量的值

2.!SetOption,!SetOptionGroup

2.1版本前想要改变Meter的参数,必须设置动态变量并在Meter参数中引用,然后用!SetVariable改变

现在可以直接使用!SetOption改变Meter的参数,无需另外设置变量

使用方法:

!SetOption [Meter] [Option] [Value] (Config)

!SetOption [Measure] [Option] [Value] (Config)

!SetOptionGroup [Group] [Option] [Value] (Config)

!SetOption无法改变:

任何[Rainmeter]下的内容

任何[Variables]下的内容 (!SetVariable则可以)

任何[Metadata]下的内容(这都是浮云)

任何[MeterStyle]下的内容 (除非该Style也是一个Measure或Meter)

任何PluginMeasure下专属Plugin的参数

Measure或Meter的类型

Meter的MeasureName

Meter的位置(使用!MoveMeter)

同时建议使用专用的!Bang(如!DisableMeasure,!HideMeter等)改变某些参数(如Disabled=1,Hidden=1等)而非!SetOption

当!SetOption与!SetVariable同时使用时,可能出现如下的问题

1. [Variables]

2. normSize=10

3. bigSize=15

4. [SomeMeter]

5. Meter=STRING

6. FontSize=#normSize#

7. MouseOverAction=!SetOption \"SomeMeter\" \"FontSize\" \"#bigSize#\"

8. LeftMouseUpAction=!SetVariable \"bigSize\" \"25\"

9. DynamicVariables=1

复制代码

当你将鼠标移到Meter上方时,字体大小被设置为bigSize的实际值15,再当你点击Meter时,虽然bigSize变为25,但是对之前的动作不会产生任何影响,字体大小仍为15

为了解决这个问题,可使用Escaping Variables和Escaping Measures (#*EscapedVariable*#与[*EscapedMeasure*]),即RM在变量识别时将跳过该变量

考虑下面的代码

1. MouseOverAction=!SetOption \"SomeMeter\" \"FontSize\" \"#*bigSize*#\"

2. LeftMouseUpAction=!SetVariable \"bigSize\" \"25\"

复制代码

当你将鼠标移到Meter上方时,字体大小被设置为字符串\"#bigSize#\",这样在bigSize改变时字体大小也会响应变化

使用!SetOption时若参数值为空,将设置该参数为默认值,例:

1. !SetOption \"SomeMeter\" \"FontColor\" \"\"

复制代码

将设置字体颜色为RM默认值黑色

3.!WriteKeyValue

最强大的变量类!Bang,直接修改.ini文档,常用于某些需要在皮肤关闭后保存的变量的修改,当然还可以修改其他任何参数

注意由于!WriteKeyValue是对文件的修改,需要刷新后才会使现有皮肤生效

Update

一、更新间隔

Section[Rainmeter]下的\"Update=\"决定整个皮肤的总更新间隔,单位毫秒,默认为1000,即一秒更新一次

Meter以及非使用Plugin=Plugins\\WebParser.dll的Measure使用参数\"UpdateDivider=\",该Meter或Measure的更新间隔为Update*UpdateDivider,例:当Update=1000而UpdateDivider=30时,每30秒更新一次;当Update=100而UpdateDivider=20时,每2秒更新一次

使用Plugin=Plugins\\WebParser.dll的Measure使用参数\"UpdateRate=\",作用与UpdateDivider相同

二、更新间隔的设置

CPU/Memory等Measure,设置为1秒基本够用

FreeDiskSpace,设置为数秒,防止对硬盘进行过多操作

使用Plugin=Plugins\\WebParser.dll的Measure,设置为数分钟,防止对某站点过于频繁的访问,否则每秒一次的更新可能占用过多带宽,甚至令对方服务器禁掉你的IP

某些诸如用户名之类的不太可能在一次开关机时间内变化可以设置为1小时

三、更新/刷新类!Bang

1.!RefreshApp

作用同Refresh all,彻底刷新

2.!Refresh,!RefreshGroup

立刻刷新皮肤,对于皮肤.ini文件的修改需要刷新而非更新

4.!Update

立刻更新皮肤,忽略Update参数,但不忽略UpdateDivider/UpdateRate参数

5.!Redraw,!RedrawGroup

重新绘制皮肤,同时会更新所有Meter,不更新Measure

6.!UpdateMeter,!UpdateMeterGroup,!UpdateMeasure,!UpdateMeasureGroup

立刻更新相应Meter/Measure,忽略UpdateDivider/UpdateRate参数

因篇幅问题不能全部显示,请点此查看更多更全内容