按键精灵插件帮助
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.什么是按键精灵的插件
按键精灵的插件是由按键精灵官方或用户自己提供的一种功能扩展。由于按键精灵本身只提供脚本制作过程中最常用的功能,而不可能面面俱到。所以,如果您稍懂一点Visual C++编写程序的知识,就可以通过自己写按键精灵插件,实现比较特殊、高级的功能,如文件读写、注册表访问,等等。如果您愿意,还可以把自己写的插件提交给我们,我们可以在按键精灵的最新版中捆绑您编写的插件,和大家共同分享您的智慧!
按键精灵的插件是通过动态链接库(DLL)的形式提供的。这些动态链接库必须满足一定的规范,并且放在按键精灵所在路径的plugin文件夹下。在按键精灵启动的时候,会自动加载plugin文件夹下的每个插件。每个插件可以包含多个“命令”,每个命令则可以看作是一个独立的函数或者子程序。比如我们提供的文件相关操作插件File.dll,就提供了ExistFile(判断文件是否存在)、CopyFile(复制一个文件)、DeleteFile(删除一个文件)等多个命令。
目前按键精灵的插件只能使用Visual C++编写。您不需要懂得很高深的Visual C++编程技巧,也不需要知道插件的技术细节。因为我们已经提供了一个“模板”插件,您只需要在这个模板上按照下文所述的步骤进行一点点修改,一个属于您自己的插件就完成了。我们推荐您使用Visual C++ 6.0,也可以用Visual C++.NET。
值得说明的是,由于技术原因,按键精灵的插件目前还不能用Visual Basic、Delphi、JBuilder等常见的开发工具编写。但是有聪明的用户使用VBScript脚本和ActiveX DLL的形式,同样实现了按键精灵的功能扩展,典型的例子如Ringfo大虾制作的QMBoost等等。严格说来,这种功能扩展不能称为按键精灵的插件,但是我们同样欢迎这种类型的功能扩展。
2. 如何制作一个插件
2.1.准备动手
为按键精灵写一个插件其实非常简单,只需要您有一点Visual C++编程的知识就够了。如果您懂Visual C++编程,就请跟我一步一步的来完成一个简单的插件。
首先得计划一下,我们的插件完成什么功能,再考虑一下这个插件都需要具有哪些命令。这里假设我们的插件是用于字符串操作的,名字就叫String.dll,这个插件目前暂时只有一个命令,名字叫StrLen,是用于得到字符串长度的。也就是说,用户通过使用我们提供的StrLen 命令,传入一个字符串,我们给他返回这个字符串的长度。
具体的说,用户可能将来会在按键精灵中这样调用我们的插件命令:
Dim length as integer
Plugin length=String.StrLen(“Hello, world”)
如果您熟悉按键精灵,那么对第一句话不会陌生,它的意思是定义一个叫length的整数变量。第二句的意思,我们来解析一下:
小结一下,我们的插件名字叫String.dll,里面提供一个命令,名叫StrLen,这个命令接受一个字符串作为参数,返回一个整数值,含义是得到字符串的长度。
OK,下面我们把按键精灵提供的插件模板(在XXX路径下)复制一份,然后在它的基础上进行修改。
2.2.编写插件的简介、插件命令和插件命令的简介
按键精灵提供的插件模板是一个Visual C++ project,我们用Visual C++ 6.0打开这个project。这个project里面包含了好几个文件,实际上我们只需要修改QMPlugin.cpp这一个文件,其他文件您都可以不用去管。
用Visual C++打开QMPlugin.cpp文件,在文件开头找到这样一行:
extern char *g_lpszPluginDescription = "这是一个插件的模板";
这个字符串定义了插件的简介,我们把它改成:
extern char *g_lpszPluginDescription = "这是我的字符串处理插件";
再找到QMPlugin.cpp文件最后,有类似于这样的内容:
QMPLUGIN_CMD_INFO g_CommandTable[] =
{
"Test1","测试1",Test1Handler,
"Test2","测试2",Test2Handler,
};
懂一点C语言的朋友应该知道这是一个结构数组,如果您不懂也没有关系,请注意花括号中间的两行,每一行代表了这个插件的一个命令。插件模板这里已经写了两个命令,其实仅仅是作为示范,没有用处,您可以把这两个命令都删掉,然后用自己定义的命令代替。花括号中间的内容可以看作是一个表格,我们称为“插件命令表”。
每一行从左到右由三个部分组成,第一部分是这个插件命令的名称,第二部分是这个插件命令的简要解释,第三部分我们暂时不管,后面再讲。
我们的字符串处理插件目前只有一个命令 StrLen,所以把代码改成:
QMPLUGIN_CMD_INFO g_CommandTable[] =
{
"StrLen","得到字符串的长度",Test1Handler,
};
第三部分我们还没有讲,所以暂时先填写一个Test1Handler,一会再回头改。
2.3.最基本的插件命令处理函数
当按键精灵用户调用我们的StrLen命令的时候,我们需要写一段代码来处理这个命令,并且给按键精灵返回字符串的长度。具体的说,对于每个命令,我们都需要写一个对应的C 语言函数来处理用户对这个命令的调用。不管这个命令有几个参数,返回值是什么类型,我们的C语言函数总是这个样子:
int XXXX(char *lpszParamList, char *lpszRetVal)
上面的XXXX是这个函数的名字,随便起什么名字都可以,只要别重名就好。注意,除了函数的名字可以改,其他的地方最好都不要改。
比如我们的StrLen命令,假如它对应的函数叫MyStrLenHandler,那么请在QMPlugin.cpp中增加这样一个函数:
int MyStrLenHandler(char *lpszParamList, char *lpszRetVal)
{
return 0;
}
我们来看这个函数,它有两个参数lpszParamList和lpszRetVal,返回值是整数。lpszParamList中存放了按键精灵传过来的字符串(比如前面例子中的“hello, world”这个字符串就会保存在这里),而返回值就是我们要告诉按键精灵的,这个字符串的长度。lpszRetVal暂时还用不上,先不要动它。
了解C语言的朋友都知道在C语言中要得到一个字符串的长度是很容易的,如下:int MyStrLenHandler(char *lpszParamList, char *lpszRetVal)
{
return strlen(lpszParamList);
}
插件处理函数就写完了,很简单吧?现在,我们还需要在StrLen这个插件命令和MyStrLenHandler这个命令处理函数之间建立起关联关系。上一节中提到,我们是这样在插件命令表中定义StrLen命令的:
"StrLen","得到字符串的长度",Test1Handler,
前两部分分别代表插件命令的名称和插件命令的简要解释,第三部分,就是这个插件命令的处理函数。也就是说,我们需要改成:
"StrLen","得到字符串的长度", MyStrLenHandler,
现在,StrLen命令就和MyStrLenHandler函数关联起来了。
到此为止,我们已经编写了一个最简单的插件。不妨用Visual C++编译这个project,把生成的DLL文件改名为String.dll,然后放在按键精灵的plugin目录下。启动按键精灵,运行这样一个简单的按键精灵脚本:
Dim length as integer
Plugin length=String.StrLen(“Hello, world”)
VBSCall MessageBox(CStr(length))
这个脚本会弹出一个对话框,对话框里面的数字就是“Hello, world”这个字符串的长度。