-
Notifications
You must be signed in to change notification settings - Fork 1
易语言插件开发
EasyGo借鉴了wox的插件架构,尤其是python插件,几乎差不多,所以如果你开发过wox的python插件,那么可以很容易的将它移植到EasyGo上面来,目前易语言的插件还没经过大量测试,欢迎来到群里交流探讨
插件的整体架构如图
插件导出三个基本接口函数供EasyGo调用,它和c++和python的有所区别,大概介绍如下:
- InitPlugin
- Query
- GetContextMenu
- UpdateSetting
接着我们来说明一下这三个函数涉及到的json字符串结构
文本型 Query(文本型 查询内容)
查询内容
{
"RawQuery": "lm xxxx",
"Keyword": "lm",
"Parameter": "xxxx"
}
它可以转化为下面的数据类型来理解
返回的结果:
{
"Results": [
{
"Title": "结果1",
"ShowType": 0,
"SubTitle": "这是结果1",
"IconPath": "app.png",
"Action": {
"FuncName": "Ra_CopyPath",
"Parameter": "参数",
"HideWindow": true
}
},
{
"Title": "结果2",
"ShowType": 0,
"SubTitle": "这是结果2",
"IconPath": "app.png",
"Action": {
"FuncName": "Ra_CopyPath",
"Parameter": "参数",
"HideWindow": true
}
}
]
}
它可以转化成如下的数据类型来理解
文本型 GetContextMenu(文本型 查询结果)
查询结果
{
"ID": "6064551FD7904BD09D23FB9CA9F4CD03",
"Title": "结果1",
"SubTitle": "这是结果1",
"ExtraData": "这个是可选的,由Query中赋值得来"
}
返回的菜单json,和Query返回的格式一样,是json数组
EasyGo提供给插件的有两种类型接口,主动的和被动的,大部分是被动调用,涉及到 PluginAction 结构体。
PluginAction里面有个FuncName,在EasyGo里面定义了一些常用的函数,方便用户调用,名字和作用如下:
Ra_CopyPath
: 会拷贝Parameter文字内容到剪切板
Ra_Copy
:这个会拷贝Parameter指定的文件到剪切板,你可以在桌面上进行粘贴文件操作
Ra_CopyImage
:拷贝图片到剪切板,可以进行图片粘贴操作
Ra_ChangeQuery
:会设置EasyGo输入框的值为Parameter字符串,如果和之前输入框的文字不同会触发一次查询操作
Ra_Delete
:删除Paramter参数指定的文件或者文件夹 (不可恢复,非移动到回收站,请注意)
Ra_Recycle
:删除Paramter参数指定的文件或者文件夹到回收站
Ra_Open
:打开Parameter指定的可执行程序或者文件夹
Ra_OpenFileFolder
:打开Parameter指定文件路径所在的文件夹
Ra_OpenWeb
:打开Parameter指定的网址
Ra_ShowMsg
: 会弹出消息提示框,非阻塞
Ra_ShowTip
: 会在系统右下角弹出提示框
Ra_ShowContent
: 会弹出一个文本浏览框显示你传入的Parameter内容,纯文本,只读
Ra_EditFile
: 会弹出一个文本框,显示你传入的Parameter路径文件的内容,纯文本,支持编辑
以上是被动调用的,根据返回的结果来进行用户点击的响应设置
然后是主动的,主动的目前只提供了如下函数,可以直接使用GetProcAddr来获取此导出函数的函数指针进行调用,注意调用约定为 stdcall
void Ra_ChangeQuery(const char* strQuery)
: 修改输入框的查询字符串,query为字符串类型,如果文本发生改变会触发重新查询
void Ra_ReQuery()
: 强制重新查询
void Ra_Reload()
: 重载
void Ra_ShowMsg(const char* title,const char* msg)
: 显示消息框,title为标题,msg是消息内容
void Ra_ShowTip(const char* title , const char* msg)
: 会在系统右下角弹出提示框,title为标题,msg是消息内容
void Ra_ShowContent(const char* title,const char* msg)
: 会弹出一个文本浏览框显示你传入的Parameter内容,纯文本,只读
void Ra_EditFile(const char* title,const char* filePath)
: 会弹出一个文本框,显示你传入的文件的内容,纯文本,支持编辑
{
"ID":"98451A7B5C764F6A9A3814EF7E4AFEEC", 这个是guid唯一标示
"Keyword":"guid", 这个是插件关键字,用户使用该默认关键字出发插件功能
"Name":"生成Guid", 插件名
"Description":"生成Guid", 插件描述
"Author":"zsxeee", 插件作者
"Version":"1.0.0", 插件版本
"PluginType":"e", 插件类型,目前有c++,python和e三种
"PluginMode":"EnterMode", 插件模式,EnterMode或者RealMode,此字段可以省略,默认为RealMode
"AcceptType": "png,ico,folder", 插件支持的拖入的文件类型,就是文件的后缀名,其中唯一特殊的是folder,代表插件可以接受文件夹路径参数, 可忽略
"IconPath": "img\\app.png", 插件图标,支持相对路径
"ExeName":"Main.py" , 插件源文件名字
"CfgPath": "set.json" 插件的配置选项,使用相对路径,指定json配置文件路径。可以在插件管理界面右键设置,可忽略
}
配置文件json,配置项均为文本格式,而且不支持多级,类似map结构
{
"name": "admin",
"password": "admin",
"role": "admin"
}
插件打包后的格式是 插件名.Plugin
,其实就是将插件的三个文件打包成zip文件,然后把zip后缀改成Plugin即可,记住了,打包的时候插件的外层不要有文件夹
如果你有说明文件,那么请加入 readme.txt
文件,全小写,然后加入帮助内容,用户在插件管理页面可以通过右键详情打开帮助文档,然后你也可以放入手动配置文件,在plugin.json指定(见上),然后用户可以在插件管理页面通过右键设置打开配置文件进行配置
具体的使用方法请参考示例