RM高阶教程.docx
《RM高阶教程.docx》由会员分享,可在线阅读,更多相关《RM高阶教程.docx(54页珍藏版)》请在冰豆网上搜索。
RM高阶教程
写在开篇之前:
Rainmeter(以下简称RM)作为一个基于代码而非图形化界面的开放式桌面美化软件,绝大部分内容都是来自于默默奉献的非盈利制作者(据我所知只有Gnometer、Enigma、ABP是RM官方开发者制作的套装)。
一个高素质的RM皮肤制作者群体不仅为推广使用RM提供丰富的内容,反过来也能促进RM在新版本中优化设计、开发更强的功能,可以说是RM的中坚力量
[XANCI的RM高级教程]系列教程面向RM皮肤制作者,以及希望深入了解RM并成为皮肤制作者的广大RM使用者。
由于本教程不会提供关于"RM如何使用"之类问题的解答,建议新手还是先看看本版的其他入门教程
本教程基于最新版本的Rainmeter2.1.0r959英文版,并会随新版本的推出同步更新
中文版虽然汉化了程序界面,但是皮肤代码的编辑仍然是英文(RM在可预见的将来不会将代码部分进行本地化),习惯使用英文指代许多RM名词、术语将为理解使用和编辑RM皮肤带来方便,本系列教程在每个英文术语第一次出现时附加翻译,后面则不再翻译
另外要提到的一个重要的参考是官方的Manual(使用手册,或称帮助文档)
此手册目前汉化工作还在进行中,最新英文版本地址如下
当RM使用中遇到任何问题时,希望有条件的同学第一时间先参考Manual中相关条目,因为Manual由RM开发团队编写,其权威性、全面性超过任何网上的教程(本人为了实现一个功能,曾经动用了ColorMatrix,后来发现还有一个ImageTint参数可以使用==)
绪论
一、RM简介
当安装完RM后启动,第一次安装的话应该不会加载任何皮肤,右键点击任务栏右侧雨滴状的托盘图标,在弹出菜单中点击About(关于),点击最后一个标签页Version(版本)
最上面显示的是你当前的RM版本,以RM2.1英文版为例
Rainmeter2.1.0r95964-bit(Sep182011)
2.1.0是RM的主版本号,r959是小版本号,2.1.0r959表示这是2.1.0的正式发布版,在2.0.0发布版之后、2.1.0发布版之前的一系列测试版的版本号则会显示为诸如2.1.0betarXXX,代表2.1.0的测试版,XXX编号会小于正式版的959,RM团队会在每个测试版中修正bug,增加新的功能。
RM正式版本间的开发期通常比较长,其中新出的皮肤可能部分用到beta版本的功能,建议随时关注官网下载最新的版本
64-bit表示你安装的是适用64位系统的版本,对64位系统的支持较好,有些Plugin(插件)会区分32和64位版本
Sep182011表示当前版本发布的日期,2.1中文版显示的是Sep202011,新版本的翻译工作也是需要时间的,向翻译组的无私奉献致敬!
二、RM路径
还是Version标签页,下面有三个路径,每人的电脑上区别于系统设置、安装时的选择等等
1.Path(主路径):
通常位于ProgramFiles\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文件)或者RefreshAll(全部刷新,同时会更新目录)
.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.RegularExpression(正则表达式)
RM使用的一种查找和替换文本的表示法,最常见于调用WebParser.dll插件的Measure(RegExp=),如天气、RSS浏览器等,大部分此类皮肤的编辑只需参考同类皮肤;其次是一些Measure中复杂的Substitute(替换),不常见
3.LuaScript(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(路径):
通常位于ProgramFiles\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中的内容,本篇之后的所有例子都是基于这三个路径
Rainmeter2.1.0r95964-bit(Sep182011)
Path:
D:
\ProgramFiles\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-inVariables(内置变量),下面一一介绍
1.固定的路径,在RM安装完成后就是固定的,因人而异
#PROGRAMDRIVE#
RM安装盘符,例:
"D:
"
#PROGRAMPATH#
RM安装路径,例:
"D:
\ProgramFiles\Rainmeter\"
#SETTINGSPATH#
RM配置文件的路径,例:
"D:
\AppData\Roaming\Rainmeter\"
#SKINSPATH#
RM皮肤文件的路径,例:
"D:
\Documents\Rainmeter\Skins\"
#PLUGINSPATH#
RM插件的路径,例:
"D:
\ProgramFiles\Rainmeter\Plugins\"
#ADDONSPATH#
RM附加组件的路径,例:
"D:
\ProgramFiles\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指令
一、介绍
!
Bang指令(以下简称!
Bang)是RM用来调控RM内部参数、执行外部命令的指令,跟随在触发器之后
在RM2.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)如果皮肤被设置为Clickthrough,整个皮肤上的任何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]
调用LiteSteplsBox,不常见
!
ResetStats
将#SETTINGSPATH#Rainmeter.stats中的数据(网络流量统计)清零
!
RefreshApp
相当于RM右键菜单中的Refrashall
!
Quit
退出RM
3.变量操作类!
Bangs
!
SetOption[Meter/Measure][Option][Value](Config)
改变Meter或Measure下的参数
!
SetOptionGroup[Group][Option][Value](Config)
改变Meter/MeasureGroup下的参数
!
WriteKeyValue[Section][Key][Value](FileSpec)
将RM使用的.ini或.inc文件内容永久性改写
!
SetVariable[Variable][Value](Config)
改变变量的值
!
SetVariableGroup[Variable][Value][Group]
改变ConfigGroup内变量的值
4.Skin操作类!
Bangs
!
Show(Config)
显示
!
Hide(Config)
隐藏
!
Toggle(Config)
切换显示或隐藏
!
ShowGroup[Group]
显示ConfigGroup
!
HideGroup[Group]
隐藏ConfigGroup
!
ToggleGroup[Group]
切换显示或隐藏ConfigGroup
!
Move[X][Y](Config)
移动
!
ActivateConfig[Config][Ini-file]
加载
!
DeactivateConfig(Config)
卸载
!
DeactivateConfigGroup[Group]
卸载ConfigGroup
!
ToggleConfig[Config][Ini-file]
切换加载或卸载
!
Refresh(Config)
刷新
!
RefreshGroup[Group]
刷新ConfigGroup
!
Update(Config)
更新
!
UpdateGroup[Group]
更新ConfigGroup
!
Redraw(Config)
重新绘制
!
RedrawGroup[Group]
重新绘制ConfigGroup
!
SetTransparency[AlphaAmount](Config)
设置透明度
!
SetTransparencyGroup[AlphaAmount][Group]
设置ConfigGroup透明度
!
ShowFade(Config),!
HideFade(Config),!
ToggleFade(Config)
显示、隐藏、切换显示或隐藏时使用渐变效果
!
ShowFadeGroup(Config),!
HideFadeGroup(Config),!
ToggleFadeGroup(Config)
显示、隐藏、切换显示或隐藏ConfigGroup时使用渐变效果
!
ShowBlur(Config)
显示Aero效果
!
HideBlur(Config)
隐藏Aero效果
!
ToggleBlur(Config)
切换显示或隐藏Aero效果
!
AddBlur[Region](Config)
添加Aero效果区
!
RemoveBlur[Region](Config)
移除Aero效果区
!
Draggable[NewSetting](Config)
设置允许拖动
!
DraggableGroup[NewSetting][Group]
设置ConfigGroup允许拖动
!
ZPos[POS](Config)
设置垂直位置
!
ZPosGroup[POS][Group]
设置ConfigGroup垂直位置
!
KeepOnScreen[NewSetting](Config)
设置钉在桌面
!
KeepOnScreenGroup[NewSetting][Group]
设置ConfigGroup钉在桌面
!
ClickThrough