因为打算在溪流WarKey 3.0 里加入插件系统,五一的时候看了下 Lua 脚本。嗯嗯,果然挺好用。
于是,基本上准备在使用 Lua 作为插件脚本语言了。原来考虑过的DLL形式由于安全方面不好控制,就算了。
扩展脚本的基本格式大概如下(目前只是草稿,到时候会公布一个正式格式):
Extension =
{
Application = "xlWarKey",
Version = "3.0",
NameSpace = "http://www.streamlet.org/api/xlwarkey/3.0",
ExtensionName = "SampleExtension",
Configuration =
{
setting1 = "number",
setting2 = "string",
— …
},
Entrance = function (id)
Print("Hello, world");
return false;
end
};
所有内容只在一个全局变量 Extension 中定义。
前面三项内容用作内部区分该脚本针对的应用程序及其版本,以及所需要的API等。
ExtensionName 是该扩展的名称。
Configuration 用于告知 溪流WarKey 所需要的设置,溪流WarKey将会在方案配置界面显示这些配置,让用户填写。允许 "number"、"string" 两种类型的配置值。脚本执行的时候,溪流WarKey会将实际值设置到这些变量上。
Entrance 是入口函数,其中有个id参数,用于区分不同的配置。必须返回一个布尔值。目前没有定义返回值的含义。
举个例子,喊话脚本。可能的配置的信息有:喊话的内容。这样,可以在 Configuration 里面设定一个配置项,类型为 string。溪流WarKey会让用户填写喊话内容。每个不同的喊话内容以id作区分,就是说,使用同一个脚本,用户可以配置多个喊话内容。溪流WarKey会维护这些id和配置的对应关系。最后,用户将 (喊话脚本,id=0) 这样的信息作为一个动作加入改键列表,当有对应事件发生时,溪流WarKey将调用 Entrance(id)。
(刚才这样写下来,觉得Configuration中的每一项可能都需要一个描述信息,用于告诉用户这一项是干嘛的。这里可能会改一改。)
此外,脚本的其他范围允许定义全局变量、全局函数等(但不推荐)。但是,只有进入Entrance后,所提供的API才会有效。目前想到的API大概有:按下某键、放开某件、移动鼠标、单击鼠标(含左键、右键、滚轮、横滚轮、侧键1、侧键2,下同)、滚动鼠标(滚轮、横滚轮)、设置剪贴板文本、取窗口大小、取光标位置、延时。如还有需要的请告知。