RM脚本Measure——Script(使用lua脚本)
Preface:其实Script(脚本)这个Measure已不是什么新的Measure了,但是几乎没有多少中使用到它。可能是它使用的脚本语言门槛比较高的缘故。Rainmeter官网中的介绍(English):http://rainmeter.net/RainCMS/?q=LuaForRainmeter使用的脚本为lua:http://baike.baidu.com/view/416116.htm
http://www.codingnow.com/2000/download/lua_manual.html
Measure=ScriptMeasure就类似于“Plugin” Measure,可以拓展RM的功能。但脚本的编写却比Plugin(使用C++或C#编写的dll)的要简单得多。
开始
在皮肤配置中
Measure=Script ----
ScriptFile=MyScript.lua ----这个参数指定使用的脚本的路径,是必需的
TableName=MyScriptTable ----这个参数可以是任意值,它是用来与其它的脚本Measure区别开来的,所以值是唯一的,也是必需的
MySetting="SomeSetting" ----这个参数不是必须的,它是用来向当前使用的Lua脚本的传递参数的,参数的名称与数量都要与Lua脚本中的表PROPERTIES相对应。
UpdateDivider=1 ----这人与其它的Measure一样,可以不要
脚本中的内容:
一个表:
用来存放在皮肤中的变量,如上面的MySetting
PROPERTIES=
{
MySetting="";
--
}
几个必要的函数:
function Initialize()
--初始化函数,皮肤刷新时,会调用这个函数
function Update()
--皮肤每更新更新一次,都会调用这个函数,
function GetStringValue()
function GetValue()
--这两个函数有且只能有一个,它的功能是返回字符串(GetStringValue)或数值(GetValue)给皮肤中调用该脚本的Measure
例:
DynamicWindowSize=1
Update=1000
Measure=Script
ScriptFile=#CURRENTPATH#getinistring.lua
TableName=GetString;向在当前皮肤所在文件夹下的getinistring.lua脚本传递参数
FilePath="#CURRENTPATH#timesetting.cfg"
secName="time1"
KeyName="h"
Defstr=" "
Meter=String
MeasureName=MeasureLuaScript
FontSize=12
FontColor=255,255,255,255
Solidcolor=0,0,0,100
lua脚本中的代码:
--[[
*作者:asia
*版本:1.0
*描述:lua脚本For Rainmeter,获取配置文件
*版权所有@
]]
PROPERTIES =
{
filepath="";
secName="";
keyname="";
defstr="";
}
function Initialize()
FilePath =PROPERTIES.filepath;
Secstr=PROPERTIES.secName;
Keystr=PROPERTIES.keyname;
Defstr=PROPERTIES.Defstr;
end -- function Initialize
function Update()
StrVal=ReadIniFile(FilePath,Secstr,"H","0");
end -- function Update
function GetStringValue()
if not StrVal then StrVal="can not get anystring!" end ;
return StrVal;
end -- function GetStringValue
function ReadIniFile(filename,section,Key,default)
local gotsec=false;
local i,j=nil,nil;
local Keyvalue=nil;
if not filename or filename=="" then
return "missing \"filename\"";
elseif not section or section=="" then
return "missing \"secName\"";
elseif not Key or Key=="" then
return "missing \"keyName\"";
end ;
section=string.lower(section);
Key=string.lower(Key);
for tmp in io.lines(filename,r) do
tmp=string.lower(tmp);
if not gotsec then
i,j=string.find(tmp,section.."]");
if i then gotsec=true end;
else
i,j,Keyvalue=string.find(tmp,Key.."%s*=%s*(.*)%s*");
--print(Keyvalue);
if i then break end;
end;
end;
----io.close(FileN);
if not Keyvalue then Keyvalue=default end;
return Keyvalue;
end
我想困难的不是这个脚本Measure的使用,而是lua脚本的编写。
所以我发这个帖只是为了让喜欢RM的朋友知道RM里还有这么一个Measure。
沙发 支持一个 顶下 努力学习rm皮肤编写中 哦,还能用lua的呀,要是支持python就好了,python更大众一些。 <font face="monospace "><font color="#000000"><div class="blockcode"><div id="code0"><ol><li> <br />
<li>DynamicWindowSize=1 <br />
<li>Update=1000 <br />
<li><br />
<li> <br />
<li>Measure=Script <br />
<li>ScriptFile=#CURRENTPATH#getinistring.lua<br />
<li>TableName=GetString;向在当前皮肤所在文件夹下的getinistring.lua脚本传递参数<br />
<li>FilePath="#CURRENTPATH#timesetting.cfg"<br />
<li>secName="time1"<br />
<li>KeyName="h"<br />
<li>Defstr=" "<br />
<li><br />
<li> <br />
<li>Meter=String <br />
<li>MeasureName=MeasureLuaScript <br />
<li>FontSize=12 <br />
<li>FontColor=255,255,255,255<br />
<li>Solidcolor=0,0,0,100</ol></div><em onclick="copycode($('code0'));">复制代码</em></div></font></font><br />
学习来了,支持下! 好像c语言.... 看到这帖子真是高兴! 强烈支持楼主ing…… 强烈支持楼主ing……顶一个先~
仙湖付在细看学习