按键精灵插件帮助_第1页
按键精灵插件帮助_第2页
按键精灵插件帮助_第3页
按键精灵插件帮助_第4页
按键精灵插件帮助_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.什么是按键精灵的插件按键精灵的插件是由按键精灵官方或用户自己提供的一种功能扩展。由于按键精灵本身只提供脚本制作过程中最常用的功能,而不可能面面俱到。所以,如果您稍懂一点VisualC++编写程序的知识,就可以通过自己写按键精灵插件,实现比较特殊、高级的功能,如文件读写、注册表访问,等等。如果您愿意,还可以把自己写的插件提交给我们,我们可以在按键精灵的最新版中捆绑您编写的插件,和大家共同分享您的智慧!按键精灵的插件是通过动态链接库(DLL)的形式提供的。这些动态链接库必须满足一定的规范,并且放在按键精灵所在路径的plugin文件夹下。在按键精灵启动的时候,会自动加载plugin文件夹下的每个插件。每个插件可以包含多个“命令”,每个命令则可以看作是一个独立的函数或者子程序。比如我们提供的文件相关操作插件 File.dl1,就提供了ExistFile(判断文件是否存在)、CopyFile(复制一个文件)、DeleteFile(删除一个文件)等多个命令。目前按键精灵的插件只能使用VisualC++编写。您不需要懂得很高深的VisualC++编程技巧,也不需要知道插件的技术细节。因为我们已经提供了一个“模板”插件,您只需要在这个模板上按照下文所述的步骤进行一点点修改,一个属于您自己的插件就完成了。我们推荐您使用VisualC++6.0,也可以用VisualC++.NET。值得说明的是,由于技术原因,按键精灵的插件目前还不能用VisualBasic、Delphi.JBuilder等常见的开发工具编写。但是有聪明的用户使用VBScript脚本和ActiveXDLL的形式,同样实现了按键精灵的功能扩展,典型的例子如Ringfo大虾制作的QMBoost等等。严格说来,这种功能扩展不能称为按键精灵的插件,但是我们同样欢迎这种类型的功能扩展。2.如何制作一个插件准备动手为按键精灵写一个插件其实非常简单,只需要您有一点VisualC++编程的知识就够了。如果您懂VisualC++编程,就请跟我一步一步的来完成一个简单的插件。首先得计划一下,我们的插件完成什么功能,再考虑一下这个插件都需要具有哪些命令。这里假设我们的插件是用于字符串操作的,名字就叫String.dll,这个插件目前暂时只有一个命令,名字叫StrLen,是用于得到字符串长度的。也就是说,用户通过使用我们提供的StrLen命令,传入一个字符串,我们给他返回这个字符串的长度。具体的说,用户可能将来会在按键精灵中这样调用我们的插件命令:DimlengthasintegerPluginlength=String.StrLen(“Hello,world”)如果您熟悉按键精灵,那么对第一句话不会陌生,它的意思是定义一个叫length的整数变量。第二句的意思,我们来解析一下:Pluginlength=String.StrLen(“Hello,world”)表明这是一个插件命令返回值放入变量表明这是一个插件命令返回值放入变量length小结一下,我们的插件名字叫String.dll,里面提供一个命令,名叫StrLen,这个命令接受一个字符串作为参数,返回一个整数值,含义是得到字符串的长度。OK,下面我们把按键精灵提供的插件模板(在XXX路径下)复制一份,然后在它的基础上进行修改。编写插件的简介、插件命令和插件命令的简介按键精灵提供的插件模板是一个VisualC++project,我们用VisualC++6.0打开这个projecto这个project里面包含了好几个文件,实际上我们只需要修改QMPlugin.cpp这一个文件,其他文件您都可以不用去管。用VisualC++打开QMPlugin.cpp文件,在文件开头找到这样一行:externchar*g_lpszPluginDescription="这是一个插件的模板”;这个字符串定义了插件的简介,我们把它改成:externchar*g_lpszPluginDescription="这是我的字符串处理插件”;再找到QMPlugin.cpp文件最后,有类似于这样的内容:QMPLUGIN_CMD_INFOg_CommandTable[]={"Test1”,”测试1”,Test1Handler,"Test2”,”测试2”,Test2Handler,};懂一点C语言的朋友应该知道这是一个结构数组,如果您不懂也没有关系,请注意花括号中间的两行,每一行代表了这个插件的一个命令。插件模板这里已经写了两个命令,其实仅仅是作为示范,没有用处,您可以把这两个命令都删掉,然后用自己定义的命令代替。花括号中间的内容可以看作是一个表格,我们称为“插件命令表”。每一行从左到右由三个部分组成,第一部分是这个插件命令的名称,第二部分是这个插件命令的简要解释,第三部分我们暂时不管,后面再讲。我们的字符串处理插件目前只有一个命令StrLen,所以把代码改成:QMPLUGIN_CMD_INFOg_CommandTable[]={"StrLen”,”得到U字符串的长度”,Test1Handler,};第三部分我们还没有讲,所以暂时先填写一个Test1Handler,一会再回头改。最基本的插件命令处理函数当按键精灵用户调用我们的StrLen命令的时候,我们需要写一段代码来处理这个命令,并且给按键精灵返回字符串的长度。具体的说,对于每个命令,我们都需要写一个对应的C语言函数来处理用户对这个命令的调用。不管这个命令有几个参数,返回值是什么类型,我们的C语言函数总是这个样子:intXXXX(char*lpszParamList,char*lpszRetVal)上面的XXXX是这个函数的名字,随便起什么名字都可以,只要别重名就好。注意,除了函数的名字可以改,其他的地方最好都不要改。比如我们的StrLen命令,假如它对应的函数叫MyStrLenHandler,那么请在QMPlugin.cpp中增加这样一个函数:intMyStrLenHandler(char*lpszParamList,char*lpszRetVal){return0;}我们来看这个函数,它有两个参数lpszParamList和lpszRetVal,返回值是整数。lpszParamList中存放了按键精灵传过来的字符串(比如前面例子中的“hello,world”这个字符串就会保存在这里),而返回值就是我们要告诉按键精灵的,这个字符串的长度。lpszRetVal暂时还用不上,先不要动它。了解C语言的朋友都知道在C语言中要得到一个字符串的长度是很容易的,如下:intMyStrLenHandler(char*lpszParamList,char*lpszRetVal){returnstrlen(lpszParamList);}插件处理函数就写完了,很简单吧?现在,我们还需要在StrLen这个插件命令和MyStrLenHandler这个命令处理函数之间建立起关联关系。上一节中提到,我们是这样在插件命令表中定义StrLen命令的:"StrLen”,”得到U字符串的长度”,Test1Handler,前两部分分别代表插件命令的名称和插件命令的简要解释,第三部分,就是这个插件命令的处理函数。也就是说,我们需要改成:"StrLen","得到U字符串的长度”,MyStrLenHandler,现在,StrLen命令就和MyStrLenHandler函数关联起来了。到此为止,我们已经编写了一个最简单的插件。不妨用VisualC++编译这个project,把生成的DLL文件改名为String.dll,然后放在按键精灵的plugin目录下。启动按键精灵,运行这样一个简单的按键精灵脚本:DimlengthasintegerPluginlength=String.StrLen(“Hello,world”)VBSCallMessageBox(CStr(length))这个脚本会弹出一个对话框,对话框里面的数字就是“Hello,world”这个字符串的长度。返回值为字符串的插件命令下面我们为String这个插件再增加一个命令,名字叫StrRev,这个命令接受一个字符串作为参数,返回值是把参数中字符串的内容倒置,比如把”hello”变成”olleh”。和StrLen不同的是,它的返回值不是整数,而是一个字符串。不管怎么样,我们都需要为这个命令建立一个处理函数,假如这个处理函数名字叫MyStrRevHandler,这个函数的原型必须是:intMyStrRevHandler(char*lpszParamList,char*lpszRetVal)可是,我们希望在这个函数里面返回一个字符串,应该如何处理呢?按键精灵规定:如果lpszRetVal的内容被命令处理函数修改过,则忽略命令处理函数返回的整数值,认为这个命令处理函数返回的是lpszRetVal这个字符串。也就是说,如果我们把按键精灵传来的字符串倒置后,只要复制到lpszRetVal指向的字符串中,导致lpszRetVal发生了修改,则这个命令的返回值就被认为是lpszRetVal。那么,我们的MyStrRevHandler处理函数应该这样编写:intMyStrRevHandler(char*lpszParamList,char*lpszRetVal){strcpy(lpszRetVal,_strrev(lpszParamList));return0;}我们首先调用C语言标准库函数_strrev把字符串lpszParamList(也就是按键精灵传来的字符串)倒置,然后调用C语言标准库函数strcpy把倒置后的结果复制到lpszRetVal中。最后,StrRev这个命令同样需要记录在插件命令表中,现在我们的插件命令表变成:QMPLUGIN_CMD_INFOg_CommandTable[]={"StrLen”,”得到U字符串的长度”,MyStrLenHandler,"StrRev”,”倒置一个字符串”,MyStrRevHandler,};编译一下,现在我们的String插件就包含两条命令了!包含不止一个参数的插件命令下面我们为String这个插件再增加一个命令,名字叫StrCmp,这个命令接受两个字符串,并比较这两个字符串的内容,如果相同就返回0,否则返回非0。我们给这个命令的处理函数起名为MyStrCmpHandler。同样的,它的原型必须是:intMyStrCmpHandler(char*lpszParamList,char*lpszRetVal)不同的是,往常我们的命令只有一个参数,而这里有两个参数。按键精灵会把两个参数都放在lpszParamList,中间用逗号分隔。所以,我们必须把这两个参数从lpszParamList拆分出来。怎么拆分?我不反对您自己写代码,但是插件模板中已经为您提供了一个函数,名叫ParseParam。这个函数的参数是多个字符串,其中第一个是输入,后面的都是输出。它的作用是把第一个参数代表的字符串以逗号为界,拆成多个字符串,然

后分别存放在第二个,第三个参数中。举例来说,对于插件命令StrCmp,我们应该这样写处理函数:intMyStrCmpHandler(char*lpszParamList,char*lpszRetVal){charlpszString1[1024],lpszString2[1024];ParseParam(lpszParamList,lpszString1,lpszString2);returnstrcmp(lpszString1,lpszString2);}在上面的命令处理函数中,由于StrCmp命令需要返回一个整数,所以lpszRetVal我们就不要动了。我们自己定义了两个字符串变量(字符数组)lpszString1和lpszString2,两个字符串的最大长度都是1024(估计应该是够了吧,如果您还觉得不够,再增加一些也没有问题)。接下来调用ParseParam函数,把lpszParamList拆成两个参数,分别存放在lpszString1和lpszString2中。然后再调用C语言标准库函数strcmp比较这两个字符串。如果您有兴趣,可以在插件模板的源代码中看看ParseParam是如何实现的。事实上,ParseParam的实现非常简单,以至于安全性和可靠性都不好。比如前面的例子中,如果lpszString1里面要存放的字符串长度超过了1024,就会出大麻烦。熟悉C语言的朋友肯定会批评我们的写法,不过在多数情况下它还是很好用的。和前面一样,StrCmp这个命令也需要在插件命令表里面登记,这里我们就不多说了。数字签名一般来说,您编写的插件只要编译成一个DLL文件,并且放在按键精灵所在路径的plugin文件夹下,就可以马上使用了。但是这样的插件在按键精灵中会弹出一个警告,如下图所示:这个插件没有教字签名没有数字签名的插件未经按键精灵官方认证可能包含不安全的代码,诘您谨埴便用如果您要对自己的插件加入数字签名,话查询我们的网站因为您的插件是用VisualC++编写的,VisualC++的强大功能使得您的插件完全可以包含任何您可以想象的内容。当然也不排除有个别心术不正的人利用这个功能,把病毒、木马等有害程序打包到插件中,然后交给别人使用。如果您编写的插件只是给自己用,那么完全可以不必理会上面的警告,它不会影响到插件的任何功能。如果您想把编写的插件给别人共享,那么最好的办法是把您的插件交给我们进行认证,我们会帮您加入数字签名,还会帮您把插件放在按键精灵网站、论坛上,甚至是捆绑到按键精灵中进行推广和交流。了解更多?目前为止,我们已经学习了按键精灵插件的编写方法,确实不难吧?如果您希望熟悉巩

固一下上面的内容,我们为您提供了按键精灵5.90版本以上自带的File.dll插件的全部源代码。下载回来研究一下吧,如果有不理解的地方,欢迎您给我们发邮件垂询。3・如何使用一个插件基本操作您可能暂时不会用VisualC++,或者不想自己编写插件。但您只需要会用按键精灵写脚本,就可以享受别人的插件带来的强大功能。目前按键精灵已经在软件安装包中捆绑了三个官方开发的插件:File.dll用于一些文件相关的操作,Window.dll用于一些窗口相关的操作,还有GetSysInfo.dll用于获取一些常用的系统信息。我们还会陆续增加其他功能的插件,也会对目前的插件进行功能扩充。下面我们以File.dll为例,讲述如何使用这个插件。打开按键精灵(版本为5.90以上),新建一个脚本,在脚本编辑器的左边展开“插件命令”的面板(如果上述内容你不能理解,那么你需要先学习一下按键精灵的基本用法,真的很简单!)。在“选择插件”的下拉框中找到'File:文件操作的插件”这一项并选中,然后展开“选择插件命令”的下拉框。即可看到如下图所示的界面。[ 插件命令 存~]第一步.选择插件Fi耻:文件操作的插件第二步.选择插件命令ExistFile:判断文件或文件夹是▼插入f簸窿曲;蛔文豚文连夹蜀AVSelectDirectory:^出选择目录SelectFQe:峰茁选择文件对话耳CopyFile:复制一个文件要复制MoveFile:^动一个文件凄移动DeleteFile:fJ除一个文件耍删ReadINI:读一个INI文件〔小节名WriteiNi:写一个nrdtf牛〔小节£OpeiJile:打开一个文件反件路E档下面的下拉框中的内容就是File.dll插件提供的全部插件命令,每个命令都可以完成一个和文件操作相关的功能。比如CopyFile命令可以复制一个文件,DeleteFile命令可以删除一个文件等。使用有返回值的插件命令我们来试着使用一个命令,以SelectFile为例。请在“选择插件命令”下面的下拉框中选中SelectFile,您也许会发现下拉框太窄了导致里面的文字显示不全。没关系,把鼠标在下拉框停留一下,就会弹出完整的提示,如下所示:

前面的英文部分是这个命令的名称,后面是它的中文简介。我们从这个简介中可以看出:1、如果要使用这个命令,您不需要写任何调用参数;2、您需要定义一个变量来接收返回值(类似于高级语言的函数返回值的概念)。那么我们首先定义一个变量(其实VBScript中不定义变量也可以的,但是定义变量是一个良好的习惯),假如变量名为filepath。把这个变量名填写在下面“返回值”后面的输入框中,然后点击“插入”按钮,一条命令就插入到按键精灵的脚本中了。如图所示:笛普通|bi源文件lDimfilepath调用插件命令filepath=File.SelectFile()运行这个脚本,会弹出选择文件的对话框,当选择完毕后,被选中的文件全路径会保存在变量filepath中。使用有参数的插件命令下面我们再试试另外一个插件命令,如CopyFile。同样,先在“选择插件命令”下面的下拉框中选中“CopyFile”,鼠标在下拉框停留一下,查看详细的中文说明。从说明中可以看出,这个命令没有返回值,但是有两个调用参数,分别是要复制的文件和要复制的目标文件。我们在“调用参数”后面的编辑框里分别输入这两个参数,参数之间用逗号分隔,比如输入"c:\1.txt”,"c:\2.txt”。注意字符串常量应该用引号括起来。然后点击“插

入”按钮。在运行这个脚本前,先在C盘根目录下建立一个文件,名叫1.txt,内容随意。然后运行脚本,可以看到生成了一个一模一样的2.txt。在脚本源文件中写插件命令第普通如果您了解按键精灵,一定知道按键精灵还提供了脚本源文件直接编辑的功能。我们看看调用CopyFile命令时的脚本源文件,如图:第普通Bl源文件磴是按曜精灵垒成的脚本海支件厚在理解各条命令的基础上,您可以修改这个文件的内容材每修改的姑果将合在普通视图上有所反映PluginFile.CopyFile(T1.txt>r2.最前面蓝色的Plugin关键字表示这一行是一个插件命令调用。后面的File表示调用的是File.dll插件,File后面用圆点隔开的是插件命令的名称,以及调用参数。如果您熟悉了这种写法,其实直接写脚本源文件速度更顺手一些,当然使用的效果是一样的。下面我们来用脚本源文件编辑方式,写一个稍微复杂一点的调用插件的脚本。您可以把下面的内容全部粘贴在您的脚本编辑器中。DimfilehandlePluginfilehandle=File.OpenFile("c:\1.txt")PluginFile.WriteLine(filehandle,”您好,我是按键精灵”)PluginFile.WriteLine(filehandle,”愿我能成为您工作和娱乐中的好助手”)PluginFile.CloseFile(filehandle)运行这个脚本,再看看C盘的根目录下是不是有一个叫1.txt的文件。这个脚本使用了打开文件,往文件里面写一行内容、关闭文件等三个插件命令,这三个插件命令组合起来完成了写文件的功能。在按键小精灵中使用插件按键小精灵是由按键精灵生成的一个独立的程序。普通的按键小精灵是不包含任何插件的(连按键精灵官方提供的插件也不包含),如果要在按键小精灵中使用插件,您可以使用“附件”功能先把插件打包到您的脚本中。打开按键精灵的脚本编辑器,在右上方区域里面找到“附件”按钮并点击,出现如图所示的对话框:点击“添加”按钮,把您需要用的插件都放在脚本附件里,或者直接把插件的DLL文件拖到这个对话框里,然后选择“保存”。在脚本的第一行,写一句这样的语句:PutAttachment.\plugin这句话的意思是把当前脚本中的附件都展开到按键小精灵所在路径的plugin文件夹下。接下来,您就可以像按键精灵一样使用插件命令了。4.按键精灵官方插件详解GetSysinfo.dll插件命令名:GetOSType作用:获取当前操作系统类型参数:无返回值:整数型。Win98系统返回为0;WinNT/2000/XP返回为1命令:GetColorDep作用:获取当前屏幕色深度(颜色质量)参数:无返回值:整数型。返回当前屏幕的色深度(颜色质量),一般为4,8,16,24或32。命令:GetTime作用:得到系统启动到目前的时间参数:无返回值:整数型。以毫秒表示的系统启动到目前的时间。说明:一般用两次调用GetTime命令的结果相减,可以得到两次调用的时间差。命令:GetDateTime作用:得到当前系统日期和时间参数:无返回值:字符串型。返回当前系统日期和时间,如“2006-05-2015:27:31”命令:GetHDDSerialNumber作用:得到硬盘第一个分区的序列号参数:无返回值:整数型。返回硬盘第一个分区的序列号。Window.dll插件命令名:MousePoint作用:得到当前鼠标指向的窗口参数:无返回值:整数型。当前鼠标指向的窗口的窗口句柄命令名:Foreground作用:得到目前位于前台的窗口参数:无返回值:整数型。当前位于前台的窗口的窗口句柄命令名:Find作用:根据一个窗口类名或一个窗口标题名,找到一个匹配的窗口参数:Q窗口类名,字符串型Q窗口标题名,字符串型返回值:整数型。第一个匹配的窗口的窗口句柄说明:窗口类名和窗口标题名中可以有一个是空字符串(不能两个同时为空字符串)命令名:FindEx作用:指定父窗口或者兄弟窗口,根据一个窗口类名或一个窗口标题名,找到匹配的窗口参数:Q父窗口的句柄,整数型。为0表示不限制父窗口Q兄弟窗口的句柄,整数型。为0表示不限制兄弟窗口 Q窗口类名,字符串型 Q窗口标题名,字符串型返回值:整数型。第一个匹配的窗口的窗口句柄命令名:IsWindow作用:判断指定窗口是否存在参数:整数型。指定的窗口句柄返回值:整数型。返回值为0表示该窗口不存在,为1表示该窗口存在。命令名:GetText作用:得到指定窗口的标题参数:整数型。指定的窗口句柄返回值:字符串型。返回指定窗口的标题。命令名:GetClass作用:得到指定窗口的窗口类名称参数:整数型。指定的窗口句柄返回值:字符串型。返回指定窗口的窗口类名。命令名:GetExePath作用:得到指定窗口所属的程序路径参数:整数型。指定的窗口句柄返回值:字符串型。返回指定窗口所属的程序的全路径。命令名:GetClientRect作用:得到指定窗口的边框大小参数:整数型。指定的窗口句柄返回值:字符串型。返回指定窗口的窗口边框大小,格式类似于X1ly1lx2ly2。其中x1、y1、x2、y2分别为窗口左上点和右下点的坐标。命令名:Active作用:激活指定的窗口参数:整数型。指定的窗口句柄返回值:无命令名:Max作用:最大化指定的窗口参数:整数型。指定的窗口句柄返回值:无命令名:Min作用:最小化指定的窗口参数:整数型。指定的窗口句柄返回值:无命令名:Restore作用:恢复指定的窗口的原始大小参数:整数型。指定的窗口句柄返回值:无命令名:Move作用:移动指定的窗口,使左上角移到指定的坐标参数:Q指定窗口的句柄,整数型。QQ分别为指定的x和y坐标,整数型返回值:无命令名:Close作用:关闭指定的窗口参数:整数型。指定的窗口句柄返回值:无File.dll插件命令名:ExistFile作用:判断文件或文件夹是否存在参数:字符串型。要判断的文件或者文件夹的全路径返回值:整数型。返回值为0表示文件或文件夹不存在;返回值为1表示存在该文件,返回值为2表示存在该文件夹命令名:SelectDirector

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论