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参数
因篇幅问题不能全部显示,请点此查看更多更全内容