rainmeter皮肤编写(进阶篇)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一节制作流程
开头部分
Rainmeter
有两项必需写的
Author=作者
Update=皮肤的刷新率,1000=1秒,默认=1000.
其他的根据需要写,比如AppVersion指定所需的RM版本,BackgroundMode定义背景模式等等。
这里,对MouseActionCursor这个很多人还不清楚的做下讲解。
如果你后面的Meter定义成Button按钮,并且该按钮带有鼠标活动(好比开始菜单球球,鼠标有滑入按下离开三种行为),可以在开头部分将MouseActionCursor=0,否则后面的Meter会被遮挡,因为该值默认为1.
元数据和变量
Metadata元数据
定义数据结构大小创建时间等等一些信息,对整个皮肤不起作用,所以很多皮肤没有这段或干脆留空。
Variables 变量
这段很关键,如果皮肤较大,一些常用的像Font,FontColor等建议放入此处,倒不是图写起来方便,而是修改起来十分方便,整个皮肤看上去也整洁了许多。
调用RM内置变量用@include=加路径引出。
测量部分
Measure
Measure的类,共计13个类,每个类有各自的子项,详细规定了类的属性。
CPU
测算CPU负载(如多核可调用PerfMon插件)。
Memory
测算内存总利用率。
PhysicalMemory
测算物理内存分配。
SwapMemory
测算虚拟内存分配。
NetIn
测算网络下载流量。
NetOut
测算网络上载流量。
NetTotal
测算网络总流量。
FreeDiskSpace
测算空闲硬盘总量。
PefMon
测算终端性能数据。
Uptime
显示系统开机后持续的时间。
Plugin
插件
Registry
测算注册表值。
Time
测算当前时间和日期。
Calc
计算公式。
显示部分(表现方式)
Meter
Meter的类,共计8个类,每个类有各自的子项,详细规定了类的属性。
HISTOGRAM
直方图
STRING
字符串
BAR
进度条
BITMAP
位图
IMAGE
图像
LINE
线
ROTATOR
旋转
BUTTON
按钮
第二节实战起步
例 CPU的监测
CPU使用率
先来看单核
代码段
[MeasureCPU]
Measure=CPU 定义Measure类为CPU
[Procesor]
MeasureName=MeasureCPU 取前面的测量值
Meter=BAR 定义Meter的类为BAR,百分率的后面(四核)讲。
X=
Y=
H= BAR的高度
W= BAR的宽度
BarColor=255,255,255,120
;BAR的颜色,为十进制16色RGB,也可以用16进制(FF00##)表达。
最后0~255指定透明度。
BarOrientation=VERTICAL BAR的方向性,此处为垂直,水平=HORIZONTAL注意大写
Flip=0 如设置为1则反转BAR的方向上-下,左-右。
以目前大家比较关心的四核为例
[MeasureCPU0]
Measure=Plugin 定义Measure类为插件
Plugin=Perfmon.dll 调用系统性能终端监视器插件
PerfMonObject="Processor" 项目名称
PerfMonInstance=0 核的序号,此处为CPU1,四核分别为0 1 2 3
PerfMonCounter="% Processor Time" 计数器名,也可以设置为“Total",没有实例留空。
PerfMonDifference=1 两次测量的差值,设置为0为当前值
InvertMeasure=1 设置为1单个的值,如设置为0则叠加数据。
[CPU0]
MeasureName=MeasureCPU0 取测量值
Meter=STRING 定义Meter的类为字符串
Percentual=1 设置为1以百分数显示
X=
Y=
FontColor=
StringStyle=NORMAL(BOLD,ITALIC,BOLDITALIC)分别为正常加粗斜体斜体加粗
FontSize=
StringAlign=LEFT(RIGHT,CENTER) 对齐,分别为:左,右,居中
FontFace= 字体,必需为系统已有的
NumOfDecimals=1 整数,设置为0显示小数Text="CPU1使用率: %1%"
AntiAlias=1 开启抗锯齿
CPU温度
原来XP下有个CORETEMP插件,WIN7下不能用,要监测的话只能调用外部小程序
speedfan,关于这个,详见我在本坛的另一帖。
/thread-250799-1-1.html不再叙述。
第三节律动-旋转的地球
熟悉RM的都用过时钟皮肤,那么时针分针是如何实现旋转的呢?
今天我们抛开时间,以旋转的地球为例,讲讲Meter 的类ROTATOR旋转。
请看代码:
[Rainmeter]
Author=
Update=50 刷新率,要求较高的刷新率
[MeasureTime]
Measure=Time 测算时间
AverageSize=20 最后20次测量平均值
[MeasureCalc]
Measure=Calc 定义为计算公式
Formula=MeasureTime * 40 将测得的时间数据放大
[MeterRotator]
Meter=ROTATOR 定义类为ROTATOR旋转
MeasureName=MeasureCalc
ImageName=
;旋转的图像名,事先PS好图,尺寸和下面的W H相同,实际上本例中旋转的图片是背景透明的正方体,只不过你看到的是球体在转。
X=
Y=
W=90
OffsetX=45.5 图片偏离X轴中心位置,近似于球体半径
OffsetY=45.5 同上 Y轴
StartAngle=6.2832 旋边的起始角,以弧度计2Л
RotationAngle=6.2832 旋边的终角,以弧度计2Л
ValueReminder=1200 设定旋转一周时间,这个值除以上面的放大倍数40为实际转一周所需时间
第四节变量条件语句
RM最初只是监测系统参数,严格意义上来说不是编程语言,没有C或JAVA那样用起来顺手。
留给我们发挥的空间很窄,但是,掌握好本节内容才算真正掌握了RM,这一节在实战中所占比例极高。
变量Counter
Counter是Measure的类Calc中的重要特殊变量,说重要,是因为Counter是rainmeter 中唯一仅有的一个自变量,说特殊,是因为 Counter在所有Measure更新完后自更新(值加1)。
下面以一段GIF动画制作来讲解Counter的运用
如下图:
这是一段GIF动画,网上淘来的,先用PS自带的一款软件ImageReady将其解到动画帧,共得到21帧图,给每一帧重新编号1~21,如下图:
编写代码:要求Update小于1000
[ImageMeter]
Meter=Image
ImageName=gif\[ImageNumberCalc].png rainmeter中.前面可以插值,这里取下面计算公式得到的值1~21
DynamicVariables=1 初始值为1,没这句不显示
X=
[ImageNumberCalc]
Measure=Calc
Formula=Counter % 21Counter不断增加,除以21后值在1~21之间循环*注最低要求3帧
Substitute=".00000":"" 取整数
条件语句
IfAboveAction
如果实际测量值超过设定值时执行的命令。
IfAboveValue
IfAboveAction的设定值。
IfBelowAction
如果实际测量值低于设定值时执行的命令。
IfBelowValue
IfBelowAction的设定值。
IfEqualAction
当测量值等于IfEqualValue定义的值时执行的命令,值四舍五入到整数。
IfEqualValue
IfEqualAction的设定值。
实例以我的竖日历皮肤为例:/thread-257616-1-1.html 代码段:
[SetDay_31]
Measure=Calc
Formula=MeasureMonthRange
IfBelowValue=31
IfBelowAction=!execute [!RainmeterHideMeter label.Day31]
IfAboveValue=30
IfAboveAction=!execute [!RainmeterShowMeter label.Day31]
这是其中的一段,看这个月有没有31号,有则显示,没有则不显示。
这一段还传达给你一条信息:条件语句的位置,是用在测量部分。
第五节插件
如果你问我,rainmeter中共计有多少插件?答案是不知道。
我只能告诉你插件是RM 的重要组成部分,因为RM本身功能并不强大,因为有了各种各样插件的加入,才使得RM 的作用域越来越宽广,RM提供了很好的插件和外部程序接口,故而插件撑起了RM的半边天。
随着RM的不断发展,更多的插件加入到了RM队伍行列。
下面给出的是插件列表,不一定全。
前面已讲了PerfMon.dll插件(监测CPU),AdvancedCPU.dll和它相似,只不过增加了进程过滤功能。
PingPlugin.dll是ping服务器和监测网络延迟。
PowerPLugin.dll是本本电源。
WifiStatus和wirelessInfo是无线网卡。
luna.dll农历插件,ttplay.dll千千插件,SpeedFan.dll为温度插件。
MBM5Plungin.dll是MBM5校验,iTunesPlugin.dll是iTunes播放器插件。
最后一列下面两个是RM1.3新增加的,分别为:虚拟桌面和系统音量插件。
虚拟桌面的范例还没来得及做,以后再补。
音量插件的范例见我的另一帖:/thread-261424-1-1.html
这一节重点讲两个常用的插件QutePlugin.dll和WebParser.dll.
QutePlugin.dll是抓取图片插件,用于相册皮肤。
代码:
[MeasurePlugin]
Measure=Plugin
Plugin=Plugins\QuotePlugin.dll
PathName=图片所在的路径
FileFilter=*.jpg;*.jpeg;*.png;*.bmp;*.gif 图片格式。
可以为gif,但是只显示为静态的。
Subfolders=1 替换子文件夹,由于该插件是用javascript脚本编写,这两项可以看出java的影子。
[Pic]
MeasureName=MeasurePlugin
Meter=IMAGE
X=
Y=
W= 图片宽度
H= 图片高度
假使要为图片加背景框,加代码如下
[BG]
Meter=IMAGE
X=0
Y=0
ImageName= 背景框图片名
如果不用背景框,只想用线勾勒出相框,加代码
[LINE]
Meter=IMAGE *千万注意,此处为什么定义为IMAGE而不是LINE? 因为LINE必需和Measure捆绑,单独用LINE会出错。
W= 线宽
H= 线长
X=
Y=
SolidColor=255,255,255,90 线的颜色,实际上SolidColor指定背景色,此处为线。
下面讲WebParser.dll网页抓包插件
先来了解一下什么是RSS
什么是RSS?
RSS是一种网页内容联合格式(web content sydication format)。
它的名字是Really Simple Syndication的缩写。
RSS是XML的一种。
所有的RSS文档都遵循XML 1.0规范,该规范发布在W3C网站上。
RSS的组成:由元素节点子节点等构成,元素像title link 节点像item等。
回到插件上来,看一段RSS新闻皮肤代码
[Feed] RSS的源,一般用Feed表示
Measure=Plugin
Plugin=Plugins\WebParser.dll 调用插件
Url=/newsgn/rss_newsgn.xml QQ新闻
CodePage=936 *很多RSS新闻会出现乱码,原因在此,936表示中国地区,不是所有的都加这句,有的加了反而乱码,所以运用时以加分号和去除分号来调试。
RegExp="(?siU)<title.*>(.*)</title>.*<link.*>(.*)</link>.*<item.*<title.*>(.*)</title>. *<link.*>(.*)</link>(?(?=.*<item).*<title.*>(.*)</title>.*<link.*>(.*)</link>)"
;抓包取值。
首先在浏览器栏输入URL=后面的网址---点解查看源(ALT+J)----下拉菜单页面---查看源文件,会看见格式文件,自己对照上面的取值看看,多看几遍自然会明白怎么回事。
UpdateRate=600 刷新网卡频率
StringIndex=1 字符串序号1 如果把上面RegExp=看成X轴,这个相当于一个刻度指针,指向刻度1.
Substitute="&":"&",""":"","&Quot;":"","<br>":"","![CDATA[":"","]]":"","...":"","<":"",">":" ","/PRE>":"","PRE>":"","<":"","'":"'"
;替换。
冒号后面引号内容替换冒号前引号内容。
[MeasureItem1] RSS新闻内容
Measre=Plugin
Plugin=Plugins\WebParser.dll
Url=[Feed]
StringIndex=3 字符串代码3 指针指向第三段
Substitute=#SubstituteFeed#
[MeasureLink1] RSS新闻鼠标按下的链接网址
Measure=Plugin
Plugin=Plugins\WebParser.dll
Url=[Feed]
StringIndex=4
Substitute=#SubstituteLink#
上面是抓取文字信息的,WebParser.dll也可以抓取网页图片,关于这点,我将在后续章节里讲解。
第六节音乐播放器
我做第一款音乐播放器的时候,并不知道大多数人习惯用啥样的播放器,结果做了一款winamp的,虽然皮肤很靓丽,但是反响平平,后来一了解,发现很多人用的是千千静听,也有用foobar的,总之用winamp的很少,itunes的则少之又少。
所以今天选择主流,讲解围绕千千播放器展开。
首先不得不提插件ttplay.dll,目前我们所用的是32位的,很多64位的朋友只能遗憾的放弃。
那么什么时候有64位的插件?只能等了。
也有人问能否做一款关联到酷狗或其他类似的播放器皮肤,这里给大家解释一下,关联到何种播放器,取决于这类播放器的代码开放程度。
比如千千也是后来才开放部分代码的,而且主程序是用VC6编写的,界面是用WTL 编的,写插件还牵扯到接口,这里也呼吁有识之士尽早开发出64位的插件,以解大家之所需。
ttplay.dll插件如何用?请看一小段代码
[MeasureWA]
Measure=Plugin
Plugin=Plugins\ttplay.dll
SysInfoType=SONG_NAME 显示当前播放的歌曲名,未运行时则显示千千静听未运行。
[MeasureState]
Measure=Plugin
Plugin=Plugins\ttplay.dll
SysInfoType=STATE_NAME 显示当前千千静听的状态,指版本号。
这两段可以一起用,也可以单独只用一段,具体根据各人需要。
动作按钮后退播放暂停前进
学习各种按钮之前,咱们还是有必要熟悉下RM中的鼠标动作。
常用的四种:
MouseOverAction 鼠标滑入
MouseLeaveAction 鼠标离开
LeftMouseUpAction 鼠标左键抬起
LeftMouseDownAction 鼠标左键按下
当然不止这四种动作,只不过你只需要掌握这四种常用的即可。
动作后面用=!Execute []来执行[]内具体的任务,可以多任务叠加,书写时注意空格。
鼠标左键按下和抬起在逻辑上是有先后顺序的,Down在前Up在后,如果你只需执行一个动作,那么该动作放在Down或是Up上随你。
制作按钮
我本来可以随便找个例子来讲,因为我做了很多这类的皮肤。
但是为了让大家学到更多东西,今天,我们以徒手制作为例。
假定我们现在什么格式的图片都没有,那么,要如何制作一款高水准的播放器呢?
介绍两种特殊的字体Webdings和Wingdings
Webdings是一种Turetype(数字字形描述)的dingbat,于1997年发表,广泛应用于网页。
我截了个图,大家看看:
图中每一个Webdings字体对应一字符(唯一),RM中调用时用Text=""引用。
有时为半角字符,需要特别注意。
Wingdings情况和Webdings差不多。
更多详情请参阅:/teshu.html
开始编写代码。
因为四个按钮格式相同,所以建议单独用一段定义按钮样式。
[ButtonStyle]
Meter=STRING
FontFace=WEBDINGS 注意大写
FontColor=
FontSize=
StringAlign=
AntiAlias=1
接1楼
开始编制按钮代码
[MeterPrevious] 后退
Meter=STRING
MeterStyle=ButtonStyle 统一样式
X=
Y=
Text="7" 大家对照一下上面我截的图,看看7对应的是哪个LeftMouseDownAction=!Execute [!RainmeterPluginBang "MeasureWA UP 1 "]
[MeterPlay] 开千千
Meter=STRING
MeterStyle=ButtonStyle
X=
Y=
Text="4"
LeftMouseDownAction=!Execute ["C:\Program Files\TTplayer\TTPlayer.exe"][!RainmeterHideMeter MeterPlay][!RainmeterShowMeter MeterClose][!RainmeterRedraw] 注意绝对路径用引号刮起!RainmeterRedraw重绘窗口图形
[MeterClose] 关千千
Meter=STRING
MeterStyle=ButtonStyle
X=
Y= 这里的X Y 和MeterPlay的X Y 一致
Text="="
Hidden=1 初始时隐藏,所以加属性Hidden=1表示隐藏,只有用ShowMeter才可将其现形,Hidden=1不可省略,必需显式表达,上面MeterPlay初始属性Hidden=0可以省略
LeftMouseDownAction=!Execute [!RainmeterPluginBang "MeasureWA CLOSE 1 "][!RainmeterShowMeter MeterPlay][!RainmeterHideMeter MeterClose][!RainmeterRedraw]
[MeterPause]
Meter=STRING
MeterStyle=ButtonStyle
X=
Y=
Text=";"
LeftMouseDownAction=!Execute [!RainmeterPluginBang "MeasureWA PLAY 1 "] [MeterNext]
Meter=STRING
MeterStyle=ButtonStyle
X=
Y=
Text="8"
LeftMouseDownAction=!Execute [!RainmeterPluginBang "MeasureWA DOWN 1 "]
这一段代码中,没有加显示歌曲名,大家自行添加。
需要注意的是Text后面的字符对应的啥要明白,showmeter和hidemeter的运用,各个按钮相对应的插件动作。
本节重点讲了千千静听皮肤的编制,如果你有其他需求,可留言,我会解答。
大家想必都知道如何用Rainmeter实现硬盘的抓取吧,
如以下代码:
[MeasureDiskJ]
Measure=FreeDiskSpace
Drive=J:\
IgnoreRemovable=0
//要点,这一行的意思是“检测移动盘为真”,这个值默认是1.
[DiskJ_String]
Meter=STRING
MeasureName=MeasureDiskJ
MeterStyle=MyStringStyle
x=37
y=r
Text=J:%1
AutoScale=1
这个是最简单的抓取硬盘方法,并以“字符串”显示。
当然,接下来,我们给它加上判断语句,就能让它在插上U盘的时候显示,拔下后,让它隐藏:
[DiskJValue]
Measure=Calc
Formula=MeasureDiskJ
IfAboveValue=0.1
IfAboveAction=!Execute [!RainmeterShowMeter DiskJ_String][!RainmeterShowMeter Icon8][!RainmeterShowMeter Target8][!RainmeterRedraw]
IfEqualValue=0
IfEqualAction=!Execute [!RainmeterHideMeter DiskJ_String][!RainmeterHideMeter Icon8][!RainmeterHideMeter Target8][!RainmeterRedraw]
上述代码中的[Icon8],[Target8]分别是显示图标和命令的,名字可以换成其它任意的。
第一次发教程,如果有错误地方,请指正。
如果有不懂的,尽量问吧~~~谢谢~
如下图所示,插上前后对比如图:。