# 如何编写系统监控rm控件 - Rainmeter皮肤区 - 雨滴社区 - Powered by Discuz!
 找回密码
 点击注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 13165|回复: 54

[系统监测] 如何编写系统监控rm控件

[复制链接]

签到天数: 90 天

[LV.6]常住居民II

发表于 2011-4-15 04:48:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?点击注册

x
本帖最后由 embolon 于 2011-4-15 04:56 编辑

最近在群里发现新手们对于rm这个软件的ini配置文件的编写还是很不理解的,有一些很简单的更改大家也还是完全没有概念,所以想大概写一个教程贴,不过看到以前的帖子都是解释性的,并没有说明白为什么要用到各种measure和meter,今天我就简单的说一说。

先贴一个我刚刚自己写的系统监控(EVA风格的,无图片,全text)
图像 1.png
先解释下什么是图片,在相应的skin文件夹下的png图片,就是可以被该ini调用的图片,如果该图片内容是文字,基本上就证明了你的这个插件是不能用更改text的方法来随意更改文字的,只能求助PS类软件了,不过PS并不是今天的主题。好吧,首先来说写一个ini插件先要写什么

[Rainmeter]
BackgroundMode=1
Author=Embolon
LocalFont=Digital-7.ttf
Update=1000


[Rainmeter]是整个ini的头,用来放一些比较基本的信息,为了让别人知道这个插件是谁写的,最好把你的名字放到author后面,有个联系方式更好,方便别人debug如果你要用到什么特殊的非系统字体(或者考虑跨系统兼容性),最好把字体文件copy到当前文件夹,并加入到LocalFont属性里,LocalFont并不单一,也可以有LocalFont2,LocalFont3等等,Digital-7.ttf就是一个字体文件的名字(注意,该字体的名字有时候并不等于字体文件名,你需要打开字体文件查看),Update就是该插件的刷新率,1000为一秒,大部分插件默认为一秒,该数字越小,刷新率越高,资源占用越严重。反过来,如果你要更改某一个插件,却发现有bug,去看看author是谁,有email的话,你可以试试发个email问问,不过别指望一定会有人回答,还有就是其实大部分作者都是外国人。

[Metadata]Name=
Config=
Description=
Instructions=
Version=
Tags=
License=
Variant=
Preview=


[Metadata]用来描述该插件的功能和许可等,一般都可以不写,如果要发布个人套件的话,还是写写吧,留个名字,随便写写的话,没有也罢。

[Variables]
FontCh="微软雅黑"
;FontMil="Stencil Gothic JL"
FontIm="Impact"
FontNum="Digital-7"
FontClr=255,230,0,230
BarClrBak=255,171,0,50
BarClrAbv=255,171,0,220

然后是变量声明,其实我们在写插件的时候,一般都会用到的变量是 字体,颜色和字体大小,不然大量的重复赋值给meter内的string变量很麻烦,更改颜色或者更改字体更加麻烦,特别注意的是,如果你要编写的插件里有因人而异的内容的话(比如 天气的城市代码,或者 google calendar的 calendar url,这种东西一定要放到variable里,不然改起来太麻烦),这里特别指出,Stencil Gothic JL字体的字体文件名字一般叫做 stnlgth.ttf(就是一个典型的字体文件和字体名不同的例子),至于这些变量的名字,比如说 FontIm,这个纯粹是我自己起的名字,没有特殊含义,你愿意起什么名字就可以起什么名字(当然不能和关键字重复,比如FontFace是不能用的),和一般编程中的变量命名没有区别,不过rm这里的变量与其说是变量,不如理解为 宏 更好理解,原理上也和 宏 更为相似,而rm中的各种measure才和 真正的变量比较相似。需要注意的是,其实各种X,Y也是可以用variable定义的,如果你要经常改动某一个meter的位置,不妨定义一组X,Y给那个meter用。

[MeasureCPUAll]
Measure=CPU
Processor=0

现在就是measure的内容了,看起来很简单吧,其实不好理解,因为在这里没看到到底measure了什么,虽然说有measure的名字,不过 [ ] 里面的名字就和任何一个variable的名字一样,你可以随便起,不过还是带上Measure比较好,这样易于阅读,那么到底哪里决定了这是个measure呢,看到了吧,有measure=CPU,这里才决定了该对象是一个measure(测量数据),measure=后面都可以有什么大家自行查阅吧,明确了你需要的功能,再查找rm到底提没提供了相应的功能,有些功能是plugin提供的(比如 webparser,比如coretemp,比如speedfan,比如winmap,比如power)和这些有关的内容官网上可能也比较少,想要了解的话,摆脱大家去找找有相应功能的插件,读读人家的代码,学习一下,照葫芦画瓢,自己研究下。
特别说明的是,measure=calc可以提供简单的算术和逻辑运算,如果你需要判断一件事,比如 我的cpu占用率是不是 大于80,还是50到80,还是20到50,还是小于20,可以这样来做:
[Measure_Calculation]
Measure=Calc
Formula=(MeasureCPUAll > 80) ? 3 : ((MeasureCPUAll > 50) ? 2 : ((MeasureCPUAll > 20) ? 1 : 0))                  ;用到MeasureCPUAll了吧,其实就是个数
不知道学过编程的同学们,你们还记得三目运算符吗,是的rm里这种区间判断就是这么实现的,rm不会嵌套着使用if语句。
Measure_Calculation返回的值就是3、2、1、0,随MeasureCPUAll而变化。
那么这个measure怎么用呢,刚才说过了吧,[ ] 里面的名字随便起,这个其实就是个 变量, measure里面的内容就是这个变量怎么得到的值,至于怎么用,你以后把这个Measure_Calculation/ MeasureCPUAll 再传给别人不就行了吗。

[EngStyle]
FontSize=8
FontFace=#FontIm#
FontColor=#FontClr#
AntiAlias=1

下面这个好像用的人不多,不过这个[Style]其实就是节省你写meter的时间的,要想让一个meter string可以用,必须要有这几个内容,字体大小,字体名字,字体颜色,和显示效果,会网页的同学肯定明白了,这个跟HTML和CSS里的Style一个功能的。
特别注意的是,variable里的东东终于用到了,是的,变量名前后加上#号,就可以代替原本的内容了,在这里:FontFace=#FontIm#和FontFace="Impack"是一样的。
[MeterCPUAllPre]
Meter=String
X=0
Y=11
MeterStyle=EngStyle
Text=AT.Field

[MeterCPUAll]
Meter=String
MeasureName=MeasureCPUAll
X=55
Y=12
MeterStyle=NumStyle
NumOfDecimals=1
Text=%1%

[MeterCPUAllBar]
MeasureName=MeasureCPUAll
Meter=BAR
X=90
Y=14
W=57
H=5
BarColor=#BarClrAbv#
SolidColor=#BarClrBak#
BarOrientation=HORIZONTAL

Meter里就是这个插件真正能显示出来的东西了,为什么叫meter呢,meter是 量表 measure是 测量,这两者的关系从名字上就能反映出来。Meter的名字也是随便起的,就是一个对象实例(变量),那么从那看出来是meter呢,对的,meter=xxxMeter有很多种,比较常用的是,Image,String,Bar还有Roundline。今天主要说说string,string要用到刚才定义的style。
Meter=String这个meter,就需要显示一个东西,这个东西还得是个字符串(不理解字符串的同学,字符串可以简单的理解为 一堆 字符 的 串,比如 abcd,0123等等)显示什么呢,MeasureName=这个后面,就是你要显示的东西,是不是MeasureCPUAll呀,刚才说了,这是个 数
显示到哪里呢?
X=
Y=
H=
W=
X,Y是以左上角顶点为原点,向右和向下为正方向的直角坐标系,这种坐标系的定义和显示器制作生产有关,大家不要纠结为啥跟数学课上学的直角坐标不一样了
H是Height,W是width,一个高度,一个宽度,就是可以显示的大小为 HxW,这个设置好了,可以方便几个不同模块的对齐。
显示效果怎么样呢?MeterStyle=EngStyle刚才定义过了EngStyle,现在就告诉这个meter,用EngStyle的方式来显示
显示的东西如何做下处理呢?比方说几位小数,加个%什么的?
NumOfDecimals=1
告诉要显示几位小数,我这里就显示一位
Text=%1%
这里,%1代表传递给MeasureName的第一个参数(一般都是这个,一般都只传一个参数),后面的%就是个百分号,rm好像不需要转义字符的。

好了,如果你看完了该文的话,就应该知道,字体在哪里改,我想改哪个字的话,应该在哪改,天气代码应该放哪,我写的代码怎么方便别人使用了。

rm这个软件需要DIY精神的,愿大家在桌面美化的路上越走越靓。

本人没看过rm的源码,对ini配置文件的理解都是个人猜想,如有bug,请指正

谢谢

附上文中所用的代码
EVA monitor.rar (34.4 KB, 下载次数: 131)
代码效果图,不好看,学习用
图像 2.png
回复

使用道具 举报

签到天数: 3652 天

[LV.Master]伴坛终老

发表于 2011-4-15 08:43:57 | 显示全部楼层
不错,先收藏了,有空研究一下
回复

使用道具 举报

签到天数: 26 天

[LV.4]偶尔看看III

发表于 2011-4-15 12:06:07 | 显示全部楼层
不错的教程贴,在教程贴前排占座是必须的
回复

使用道具 举报

该用户从未签到

发表于 2011-4-22 18:17:12 | 显示全部楼层
研究研究,嘿嘿
回复

使用道具 举报

该用户从未签到

发表于 2011-4-22 23:35:10 | 显示全部楼层
虽然还没看懂,不过还是支持了。就喜欢这种帖子,可以学东西的
回复

使用道具 举报

该用户从未签到

发表于 2011-5-6 13:05:31 | 显示全部楼层
先占座~小雨V5    初学者揪头发研究ing~
回复

使用道具 举报

该用户从未签到

发表于 2011-5-15 17:51:36 | 显示全部楼层
对于初学者 貌似很难理解啊
回复

使用道具 举报

签到天数: 1 天

[LV.1]初来乍到

发表于 2011-5-15 17:57:08 | 显示全部楼层
顶一下~~很有用的~~~
回复

使用道具 举报

该用户从未签到

发表于 2011-5-18 20:53:27 | 显示全部楼层
学习学习~~~~~~
回复

使用道具 举报

该用户从未签到

发表于 2011-5-18 23:36:43 | 显示全部楼层
谢谢 解释      .....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点击注册

本版积分规则

快速回复 返回顶部 返回列表