什么是按键精灵的插件

金猪脚本(原飞猪脚本)以按键精灵教学为主,涉及UiBot,Python,Lua等脚本编程语言,教学包括全自动办公脚本,游戏辅助脚本,引流脚本,网页脚本,安卓脚本,IOS脚本,注册脚本,点赞脚本,阅读脚本以及网赚脚本等各个领域。想学习按键精灵的朋友可以添加金猪脚本粉丝交流群:554127455 学习路上不再孤单,金猪脚本伴你一同成长.

以下插件接口为按键精灵2005版接口,虽然按键精灵将一直支持这种接口,但建议大家还是采用更快更稳定的2007版插件接口开发插件。点击这里查看2007版插件接口的使用方法。

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等等。严格说来,这种功能扩展不能称为按键精灵的插件,但是我们同样欢迎这种类型的功能扩展。

  1. 如何制作一个插件

2.1. 把按键精灵6.1以前的插件升级到最新版本

如果您为按键精灵6.1以前的版本编写过插件,那么这个插件必须经过升级才能继续在按键精灵6.1版本以后使用。如果您还没有编写过按键精灵的插件,那么请您跳过这一节的内容。

由于各种技术原因,我们在按键精灵6.1版本以后对插件的格式进行了升级。因此,您必须把老版本的插件也进行升级,才能够继续使用。这个升级的过程很简单,照我下面说的步骤去做就行了。

1) 找到支持按键精灵6.1的插件的模版源代码。该源代码已随按键精灵提供;

2) 在您的插件模版源代码中找到BasFunc.cpp;CmdInfo.h这两个文件;

3) 把这两个文件复制到您编写的插件源代码中,覆盖同名文件;

4) 在您编写的插件的源代码中找到QMPlugin.cpp这个文件,打开;

5) 在QMPlugin.cpp中找到插件命令表,也就是类似于这样的内容:

QMPLUGIN_CMD_INFO g_CommandTable[] =

{

“Test1”,“测试1”,Test1Handler,

“Test2”,“测试2”,Test2Handler,

};

6) 在这个表中每一行的最后,增加本行所代表的插件命令的参数个数,再加一个逗号,比如:

“Test1”,“测试1”,Test1Handler,

改为:

“Test1”,“测试1”,Test1Handler,2,

后面增加的数字2代表插件命令Test1的参数个数;

7) 重新编译您的插件,升级完毕!

2.2. 准备动手

为按键精灵写一个插件其实非常简单,只需要您有一点Visual C++编程的知识就够了。如果您懂Visual C++编程,就请跟我一步一步的来完成一个简单的插件。

首先得计划一下,我们的插件完成什么功能,再考虑一下这个插件都需要具有哪些命令。这里假设我们的插件是用于字符串操作的,名字就叫String.dll,这个插件目前暂时只有一个命令,名字叫StrLen,是用于得到字符串长度的。也就是说,用户通过使用我们提供的StrLen命令,传入一个字符串,我们给他返回这个字符串的长度。

具体的说,用户可能将来会在按键精灵中这样调用我们的插件命令:

Dim length as integer

Plugin length=String.StrLen(“Hello, world”)

如果您熟悉按键精灵,那么对第一句话不会陌生,它的意思是定义一个叫length的整数变量。第二句的意思,我们来解析一下:

小结一下,我们的插件名字叫String.dll,里面提供一个命令,名叫StrLen,这个命令接受一个字符串作为参数,返回一个整数值,含义是得到字符串的长度。

OK,下面我们把按键精灵提供的插件模板(在按键精灵的plugin路径下)复制一份,然后在它的基础上进行修改。

2.3. 编写插件的简介、插件命令和插件命令的简介

按键精灵提供的插件模板是一个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,2,

“Test2”,“测试2”,Test2Handler,0,

};

懂一点C语言的朋友应该知道这是一个结构数组,如果您不懂也没有关系,请注意花括号中间的两行,每一行代表了这个插件的一个命令。插件模板这里已经写了两个命令,其实仅仅是作为示范,没有用处,您可以把这两个命令都删掉,然后用自己定义的命令代替。花括号中间的内容可以看作是一个表格,我们称为“插件命令表”。

每一行从左到右由四个部分组成,第一部分是这个插件命令的名称,第二部分是这个插件命令的简要解释,第三部分我们暂时不管,后面再讲,第四部分是这个插件命令包含的参数的个数。

我们的字符串处理插件目前只有一个命令 StrLen,并且这个命令只有一个参数,所以把代码改成:

QMPLUGIN_CMD_INFO g_CommandTable[] =

{

“StrLen”,“得到字符串的长度”,Test1Handler,1,

};

第三部分我们还没有讲,所以暂时先填写一个Test1Handler,一会再回头改。

2.4. 最基本的插件命令处理函数

当按键精灵用户调用我们的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”这个字符串的长度。

2.5. 返回值为字符串的插件命令

下面我们为String这个插件再增加一个命令,名字叫StrRev,这个命令接受一个字符串作为参数,返回值是把参数中字符串的内容倒置,比如把”hello”变成”olleh”。和StrLen不同的是,它的返回值不是整数,而是一个字符串。

不管怎么样,我们都需要为这个命令建立一个处理函数,假如这个处理函数名字叫MyStrRevHandler,这个函数的原型必须是:

int MyStrRevHandler(char *lpszParamList, char *lpszRetVal)

可是,我们希望在这个函数里面返回一个字符串,应该如何处理呢?按键精灵规定:如果lpszRetVal的内容被命令处理函数修改过,则忽略命令处理函数返回的整数值,认为这个命令处理函数返回的是lpszRetVal这个字符串。

也就是说,如果我们把按键精灵传来的字符串倒置后,只要复制到lpszRetVal指向的字符串中,导致lpszRetVal发生了修改,则这个命令的返回值就被认为是lpszRetVal。

那么,我们的MyStrRevHandler处理函数应该这样编写:

int MyStrRevHandler(char *lpszParamList, char *lpszRetVal)

{

strcpy(lpszRetVal, _strrev(lpszParamList));

return 0;

}

我们首先调用C语言标准库函数_strrev把字符串lpszParamList(也就是按键精灵传来的字符串)倒置,然后调用C语言标准库函数strcpy把倒置后的结果复制到lpszRetVal中。

最后,StrRev这个命令同样需要记录在插件命令表中,显然这个命令只有一个参数,现在我们的插件命令表变成:

QMPLUGIN_CMD_INFO g_CommandTable[] =

{

“StrLen”,“得到字符串的长度”, MyStrLenHandler,1,

“StrRev”,“倒置一个字符串”, MyStrRevHandler ,1,

};

编译一下,现在我们的String插件就包含两条命令了!

2.6. 包含不止一个参数的插件命令

下面我们为String这个插件再增加一个命令,名字叫StrCmp,这个命令接受两个字符串,并比较这两个字符串的内容,如果相同就返回0,否则返回非0。

我们给这个命令的处理函数起名为MyStrCmpHandler。同样的,它的原型必须是:

int MyStrCmpHandler(char *lpszParamList, char *lpszRetVal)

不同的是,往常我们的命令只有一个参数,而这里有两个参数。按键精灵会把两个参数都放在lpszParamList,中间用逗号分隔。所以,我们必须把这两个参数从lpszParamList拆分出来。怎么拆分?我不反对您自己写代码,但是插件模板中已经为您提供了一个函数,名叫ParseParam。这个函数的参数是多个字符串,其中第一个是输入,后面的都是输出。它的作用是把第一个参数代表的字符串以逗号为界,拆成多个字符串,然后分别存放在第二个,第三个参数中。

举例来说,对于插件命令StrCmp,我们应该这样写处理函数:

int MyStrCmpHandler(char *lpszParamList, char *lpszRetVal)

{

char lpszString1[1024], lpszString2[1024];

ParseParam(lpszParamList, lpszString1, lpszString2);

return strcmp(lpszString1, lpszString2);

}

在上面的命令处理函数中,由于StrCmp命令需要返回一个整数,所以lpszRetVal我们就不要动了。我们自己定义了两个字符串变量(字符数组)lpszString1和lpszString2,两个字符串的最大长度都是1024(估计应该是够了吧,如果您还觉得不够,再增加一些也没有问题)。接下来调用ParseParam函数,把lpszParamList拆成两个参数,分别存放在lpszString1和lpszString2中。然后再调用C语言标准库函数strcmp比较这两个字符串。

如果您有兴趣,可以在插件模板的源代码中看看ParseParam是如何实现的。事实上,ParseParam的实现非常简单,以至于安全性和可靠性都不好。比如前面的例子中,如果lpszString1里面要存放的字符串长度超过了1024,就会出大麻烦。熟悉C语言的朋友肯定会批评我们的写法,不过在多数情况下它还是很好用的。

和前面一样,StrCmp这个命令也需要在插件命令表里面登记,这里我们就不多说了。

2.7. 数字签名

一般来说,您编写的插件只要编译成一个DLL文件,并且放在按键精灵所在路径的plugin文件夹下,就可以马上使用了。但是这样的插件在按键精灵中会弹出一个警告,如下图所示:

因为您的插件是用Visual C++编写的,Visual C++的强大功能使得您的插件完全可以包含任何您可以想象的内容。当然也不排除有个别心术不正的人利用这个功能,把病毒、木马等有害程序打包到插件中,然后交给别人使用。

如果您编写的插件只是给自己用,那么完全可以不必理会上面的警告,它不会影响到插件的任何功能。如果您想把编写的插件给别人共享,那么最好的办法是把您的插件交给我们进行认证,我们会帮您加入数字签名,还会帮您把插件放在按键精灵网站、论坛上,甚至是捆绑到按键精灵中进行推广和交流。

2.8. 了解更多?

目前为止,我们已经学习了按键精灵插件的编写方法,确实不难吧?如果您希望熟悉巩固一下上面的内容,我们为您提供了按键精灵5.90版本以上自带的File.dll插件的全部源代码。下载回来研究一下吧,如果有不理解的地方,欢迎您给我们发邮件垂询。

3.如何使用一个插件

3.1. 基本操作

您可能暂时不会用Visual C++,或者不想自己编写插件。但您只需要会用按键精灵写脚本,就可以享受别人的插件带来的强大功能。目前按键精灵已经在软件安装包中捆绑了三个官方开发的插件:File.dll用于一些文件相关的操作,Window.dll用于一些窗口相关的操作,还有GetSysInfo.dll用于获取一些常用的系统信息。我们还会陆续增加其他功能的插件,也会对目前的插件进行功能扩充。

下面我们以File.dll为例,讲述如何使用这个插件。

打开按键精灵(版本为5.90以上),新建一个脚本,在脚本编辑器的左边展开“插件命令”的面板(如果上述内容你不能理解,那么你需要先学习一下按键精灵的基本用法,真的很简单!)。在“选择插件”的下拉框中找到“File:文件操作的插件”这一项并选中,然后展开“选择插件命令”的下拉框。即可看到如下图所示的界面。

下面的下拉框中的内容就是File.dll插件提供的全部插件命令,每个命令都可以完成一个和文件操作相关的功能。比如CopyFile命令可以复制一个文件,DeleteFile命令可以删除一个文件等。

3.2. 使用有返回值的插件命令

我们来试着使用一个命令,以SelectFile为例。请在“选择插件命令”下面的下拉框中选中SelectFile,您也许会发现下拉框太窄了导致里面的文字显示不全。没关系,把鼠标在下拉框停留一下,就会弹出完整的提示,如下所示:

前面的英文部分是这个命令的名称,后面是它的中文简介。我们从这个简介中可以看出:1、如果要使用这个命令,您不需要写任何调用参数;2、您需要定义一个变量来接收返回值(类似于高级语言的函数返回值的概念)。那么我们首先定义一个变量(其实VBScript中不定义变量也可以的,但是定义变量是一个良好的习惯),假如变量名为filepath。

把这个变量名填写在下面“返回值”后面的输入框中,然后点击“插入”按钮,一条命令就插入到按键精灵的脚本中了。如图所示:

运行这个脚本,会弹出选择文件的对话框,当选择完毕后,被选中的文件全路径会保存在变量filepath中。

3.3. 使用有参数的插件命令

下面我们再试试另外一个插件命令,如CopyFile。同样,先在“选择插件命令”下面的下拉框中选中“CopyFile”,鼠标在下拉框停留一下,查看详细的中文说明。

从说明中可以看出,这个命令没有返回值,但是有两个调用参数,分别是要复制的文件和要复制的目标文件。我们在“调用参数”后面的编辑框里分别输入这两个参数,参数之间用逗号分隔,比如输入”c:\1.txt”,”c:\2.txt”。注意字符串常量应该用引号括起来。然后点击“插入”按钮。

在运行这个脚本前,先在C盘根目录下建立一个文件,名叫1.txt,内容随意。然后运行脚本,可以看到生成了一个一模一样的2.txt。

3.4. 在脚本源文件中写插件命令

如果您了解按键精灵,一定知道按键精灵还提供了脚本源文件直接编辑的功能。我们看看调用CopyFile命令时的脚本源文件,如图:

最前面蓝色的Plugin关键字表示这一行是一个插件命令调用。后面的File表示调用的是File.dll插件,File后面用圆点隔开的是插件命令的名称,以及调用参数。如果您熟悉了这种写法,其实直接写脚本源文件速度更顺手一些,当然使用的效果是一样的。

下面我们来用脚本源文件编辑方式,写一个稍微复杂一点的调用插件的脚本。您可以把下面的内容全部粘贴在您的脚本编辑器中。

Dim filehandle

Plugin filehandle=File.OpenFile(“c:\1.txt”)

Plugin File.WriteLine(filehandle,“您好,我是按键精灵”)

Plugin File.WriteLine(filehandle,“愿我能成为您工作和娱乐中的好助手”)

Plugin File.CloseFile(filehandle)

运行这个脚本,再看看C盘的根目录下是不是有一个叫1.txt的文件。这个脚本使用了打开文件,往文件里面写一行内容、关闭文件等三个插件命令,这三个插件命令组合起来完成了写文件的功能。

3.5. 在按键小精灵中使用插件

按键小精灵是由按键精灵生成的一个独立的程序。普通的按键小精灵是不包含任何插件的(连按键精灵官方提供的插件也不包含),如果要在按键小精灵中使用插件,您可以使用“附件”功能先把插件打包到您的脚本中。

打开按键精灵的脚本编辑器,在右上方区域里面找到“附件”按钮并点击,出现如图所示的对话框:

点击“添加”按钮,把您需要用的插件都放在脚本附件里,或者直接把插件的DLL文件拖到这个对话框里,然后选择“保存”。

在脚本的第一行,写一句这样的语句:

PutAttachment .\plugin

这句话的意思是把当前脚本中的附件都展开到按键小精灵所在路径的plugin文件夹下。接下来,您就可以像按键精灵一样使用插件命令了。

你可能感兴趣的