按键精灵插件编程入门/vc6/vs2010 c++
通常情况下,按键精灵内置的函数已经能满足我们的需求了,但是某些时候(一是对性能有较高的要求,二是完成一些超出按键精灵的范围的系统调用),这时候我们就需要编写实现自己所需功能的dll然后通过按键精灵来调用,以实现我们特殊的需求。原则上来讲,我们利用vb等其他的语言都可以编写dll,但是采用c++来做会又快又好,所以本文主要介绍一下利用vc6和vs2010 c++分别来编写适合按键精灵的dll以及调用方式。
文章适合新手,高手请绕道。
1.Vc6下插件的制作及使用
官方论坛给我们提供了非常详细的步骤,链接:
https://www.doczj.com/doc/1917298601.html,/cn/qmacro/qkbase/Home/Detail/8703d916-ddf2-43e7-90be-1ba271152af9
具体操作:
我们下载下来模版文件,
其中模版压缩文件中包含官方制作的模版,
解压缩后阅读readme文件,可以看到如下:
制作方法:
1、将向导文件加入VC开发环境
将QMPluginWizard.awx拷贝到如下目录
C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Template
2、利用向导生成插件源代码框架
(1)启动VC 6
(2)点击File->New->Projects,会看到一个"按键精灵插件"的工程向导,选中新建一个工程
(3)打开CQMPlugin.cpp文件,其中有详细的插件命令添加方法
请看截图:
下一步
下一步,自动生成了框架。
注意编译的时候选择release模式。
然后就会自动生成可以编译通过的代码了,官方提供了3个例子演示如何编写插件函数。下面的步骤演示如何添加自己的函数:
按ctrl+w打开类向导,切换到automation 栏,如上图,选择add method,弹出下图窗体。
External name中输入自己函数的名字,返回类型可以选择BSTR,是com的标准字符串数据类型。注意parameter list 中就是我们要传入的参数,我们选择LPCTSTR,输入名字,按ok返回。确定后模版自动生成我们所需要的代码。我们需要修改的地方有两处,第一处就是我们刚才声明的函数定义,位于CQMPLUGIN.cpp文件的最后,我们添加两行代码(红色字体):
BSTR CQMPlugin::myhello(LPCTSTR str)
{
CString strResult;
strResult="Hello ";
strResult+=str;
return strResult.AllocSysString();
}
我们还需要修改一下函数描述表,是用于调用的时候提示的。还是在CQMPLUGIN.cpp文件中,找到:CQMPlugin::DESCRIPTION_LIST CQMPlugin::m_DescriptionList[] =
{
{"","winxos qm",""},
{"Test1","这是第一个插件函数的说明","得到一个字符串"},
{"Test2","这是第二个插件函数的说明","计算 $1 与$2 的和"},
{"Test3","这是第三个插件函数的说明","字符串 $1 与$2 的连接"},
{"hello","hello to str","说出字符串$1"}
};
红色字体的部分是修改的。
然后我们点击编译,在release目录下找到test.dll文件,
将其拷贝到按键精灵的plugin目录内,
重新打开按键精灵,我们来看一下调用方法。
新建一个脚本,在基本命令中选择插件命令,
就可以找到自己刚才放入plugin中的test插件了,选择我们的myhello函数,点击插入。我们也可以直接编写脚本MessageBox Plugin.test.myhello("winxos")
然后点击调试,就弹出了我们的hello程序。
至此,我们已经清楚的知道了如何用vc6编写dll,以及按键精灵如何与dll调用和参数传递,由于dll 权限不受限制,我们完全可以在dll中实现非常复杂的功能,然后利用按键精灵来调用以提升程序效率。
当然,我们直接用vc6来实现按键精灵的功能也是不难的,不过按键已经替我们做了许多事,大多数自动化操作都可以胜任了,我们也没有必要再重新发明车轮了。
下面介绍一下vs2010中利用c++进行dll的编写。
2.Vc2010 下插件的制作及使用
在网上找到了高手制作的vc2010工程,https://www.doczj.com/doc/1917298601.html,/viewthread.php?tid=146988
我们下载qmplugin,解压,直接利用vs2010编译,会发现无法编译通过,出现一些error,这实际上是作者提醒我们需要修改的地方,我们在源文件qmplubin.cpp中寻找#error,发现出现几个地方,仔细阅读一下附近的注释,去掉#error所在行的代码即可编译通过。下面仍举例说明如何添加自己的函数:
首先打开qmplugin.cpp文件,打开类向导,切换到方法栏,如下图,
注意,项目名称,可以通过工程属性修改为自己需要的名称,然后点击添加方法按钮。
然后添加我们的方法,注意红色矩形部分参数的添加方法。
然后根据提供的test2示例,我们在185行左右的位置添加红色矩形内的代码,如上图。
注意212行左右的guid创建,因为这份模版可以自动完成dll注册的过程,注册的时候需要一个独一无二的guid来进行识别,这个guid可以利用vs2010自带的工具来生成,如下图:
打开guid生成器,如上图,点击新建guid按钮,再点击复制,我们就得到了一个独一无二的guid,将该代码粘贴到任何文本编辑器中,我们只复制其中的guid部分,如下图:
利用上述生成的guid替换我们源代码212行左右,IMPLEMENT_OLECREATE_FLAGS中参数,如下图:
注意该方法的第二个参数就是我们的注册名,格式为工程名.xxx,xxx为自定义的名字,不能用中文。
假定我们这里注册名为winqm.math
然后我们在227行左右添加我们的函数描述,如下图:
然后我们可以到文件的最后找到我们的cube函数体进行编辑,写入以下的代码:
好了,可以编译通过了,而且会完成我们dll的自动注册。注意在win7系统下,注册dll需要管理员权限,不然无法完成注册,所以我们需要用管理员模式启动vs2010,方法是右键点击vs,选择以管理员方式启动,成功的话vs 标题栏会显示管理员,如下图:
Dll编写部分就大功告成了。
我们再来看一下按键精灵中的调用方法,因为我们的模版里面已经实现的dll的自动注册,我们按键精灵中调用的时候就不需要再将我们的dll复制到plugin目录了,直接就可以调用了。
新建一个脚本文件,输入下面的代码:
Set ws = CreateObject("winqm.math")
messagebox ws.cube(9)
运行,如下图,大功告成。
其中createobject中的参数就是我们在vs2010中注册dll时填入的名称。
好的,按键精灵插件的编写和调用过程就介绍到这里,是不是很简单呢?希望对大家有所帮助。
Winxos 2012-05-25