# RM脚本Measure——Script(使用lua脚本) - Rainmeter技术教程 - 雨滴社区 - Powered by Discuz!
 找回密码
 点击注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 14130|回复: 24

[高级教程] RM脚本Measure——Script(使用lua脚本)

[复制链接]

签到天数: 2 天

[LV.1]初来乍到

发表于 2011-3-25 21:43:42 | 显示全部楼层 |阅读模式

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

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

x
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=Script  Measure就类似于“Plugin” Measure,可以拓展RM的功能。但脚本的编写却比Plugin(使用C++或C#编写的dll)的要简单得多。

开始
在皮肤配置中

[MeasureLuaScript]
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


例:




  1. [Rainmeter]
  2. DynamicWindowSize=1
  3. Update=1000

  4. [MeasureLuaScript]
  5. Measure=Script
  6. ScriptFile=#CURRENTPATH#getinistring.lua
  7. TableName=GetString;向在当前皮肤所在文件夹下的getinistring.lua脚本传递参数
  8. FilePath="#CURRENTPATH#timesetting.cfg"
  9. secName="time1"
  10. KeyName="h"
  11. Defstr=" "

  12. [MeterLua]
  13. Meter=String
  14. MeasureName=MeasureLuaScript
  15. FontSize=12
  16. FontColor=255,255,255,255
  17. Solidcolor=0,0,0,100
复制代码




lua脚本中的代码:
  1. --[[
  2. *作者:asia
  3. *版本:1.0
  4. *描述:lua脚本For Rainmeter,获取配置文件
  5. *版权所有@
  6. ]]

  7. PROPERTIES =
  8. {
  9. filepath="";
  10. secName="";
  11. keyname="";
  12. defstr="";
  13. }

  14. function Initialize()
  15. FilePath =PROPERTIES.filepath;
  16. Secstr=PROPERTIES.secName;
  17. Keystr=PROPERTIES.keyname;
  18. Defstr=PROPERTIES.Defstr;

  19. end -- function Initialize

  20. function Update()

  21. StrVal=ReadIniFile(FilePath,Secstr,"H","0");
  22. end -- function Update

  23. function GetStringValue()
  24. if not StrVal then StrVal="can not get anystring!" end ;
  25. return StrVal;

  26. end -- function GetStringValue

  27. function ReadIniFile(filename,section,Key,default)
  28.         local gotsec=false;
  29.         local i,j=nil,nil;
  30.         local Keyvalue=nil;

  31.         if not filename or filename=="" then
  32.                 return "missing "filename"";

  33.         elseif not section or section=="" then
  34.                 return "missing "secName"";
  35.         elseif not Key or Key=="" then
  36.                 return "missing "keyName"";
  37.         end ;

  38.         section=string.lower(section);
  39.         Key=string.lower(Key);
  40.                 for tmp in io.lines(filename,r) do
  41.                 tmp=string.lower(tmp);
  42.                         if not gotsec then
  43.                                 i,j=string.find(tmp,section.."]");
  44.                                 if i then gotsec=true end;
  45.                         else
  46.                                 i,j,Keyvalue=string.find(tmp,Key.."%s*=%s*(.*)%s*");
  47.                                 --print(Keyvalue);
  48.                                 if i then break end;
  49.                         end;
  50.                 end;
  51.                 ----io.close(FileN);
  52.                 if not Keyvalue then Keyvalue=default end;
  53.         return Keyvalue;
  54. end
复制代码




我想困难的不是这个脚本Measure的使用,而是lua脚本的编写。


所以我发这个帖只是为了让喜欢RM的朋友知道RM里还有这么一个Measure。


回复

使用道具 举报

该用户从未签到

发表于 2011-3-26 00:26:07 | 显示全部楼层
沙发 支持一个
回复

使用道具 举报

签到天数: 96 天

[LV.6]常住居民II

发表于 2011-4-10 12:14:49 | 显示全部楼层
顶下 努力学习rm皮肤编写中
回复

使用道具 举报

签到天数: 90 天

[LV.6]常住居民II

发表于 2011-4-10 22:17:01 | 显示全部楼层
哦,还能用lua的呀,要是支持python就好了,python更大众一些。
回复

使用道具 举报

该用户从未签到

发表于 2011-5-16 11:51:39 | 显示全部楼层
<font face="monospace "><font color="#000000"><div class="blockcode"><div id="code0"><ol><li>[Rainmeter] <br />
<li>DynamicWindowSize=1 <br />
<li>Update=1000 <br />
<li><br />
<li>[MeasureLuaScript] <br />
<li>Measure=Script <br />
<li>ScriptFile=#CURRENTPATH#getinistring.lua<br />
<li>TableName=GetString;向在当前皮肤所在文件夹下的getinistring.lua脚本传递参数<br />
<li>FilePath=&quot;#CURRENTPATH#timesetting.cfg&quot;<br />
<li>secName=&quot;time1&quot;<br />
<li>KeyName=&quot;h&quot;<br />
<li>Defstr=&quot; &quot;<br />
<li><br />
<li>[MeterLua] <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 />
学习来了,支持下!
回复

使用道具 举报

签到天数: 32 天

[LV.5]常住居民I

发表于 2012-6-22 19:02:25 | 显示全部楼层
好像c语言....
回复

使用道具 举报

签到天数: 28 天

[LV.4]偶尔看看III

发表于 2012-11-7 11:48:37 | 显示全部楼层
看到这帖子真是高兴!
回复

使用道具 举报

签到天数: 28 天

[LV.4]偶尔看看III

发表于 2012-11-7 12:07:55 | 显示全部楼层
强烈支持楼主ing……
回复

使用道具 举报

签到天数: 49 天

[LV.5]常住居民I

发表于 2012-11-9 00:49:05 | 显示全部楼层
强烈支持楼主ing……顶一个先~
回复

使用道具 举报

签到天数: 7 天

[LV.3]偶尔看看II

发表于 2012-12-4 16:43:59 | 显示全部楼层
仙湖付在细看学习
回复

使用道具 举报

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

本版积分规则

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