WPS插件的实现和发布

来源:互联网 发布:多媒体教学软件中学 编辑:程序博客网 时间:2024/05/16 07:16

WPS插件的实现和发布

1. 关于WPS插件

关于WPS插件基于WPS的二次开发有很多方法,很多用户还习惯用WORDVBA的方式来开发。方便快捷的VBA开发方式带来便捷的同时也带来了安全隐患。现在的宏病毒数不胜数,给用户带来很多麻烦。从安全的角度考虑WPS Office 2005 虽然支持VBA开发,但是没有集成VBA(需要另行安装VBA)。为了继续享受VBA快速编程的同时又要保证安全性,基于插件二次开发无疑是更好的选择。

很多编程语言(VCVBDelphi)都能开发WPS插件,其中VBVBA的语法,使用方法和习惯完全一致。这里以VB为例,来说明WPS插件的实现和发布方法。

注:在WPS中WPS插件也称为“COM加载项”。

2. COM加载项的实现

COM加载项的实现主要依赖于COM加载项的接口,WPSCOM加载项是以add-in的机制来实现的,所以对应的接口是IDTExtensibility2。所以实现COM加载项的核心就是实现IDTExtensibility2接口,然后在相关接口事件触发想要对WPS进行的操作。

先介绍WPS提供的二次开发接口组件及如何在VB中实现IDTExtensibility2库。然后对IDTExtensibility2库的5个事件分别描述。

2.1. WPS的二次开发接口

为了保证很好的二次开发,在WPS Office三大套件提供API接口组件的同时还提供了公用层对象及add-in机制的接口组件。WPS各模块对应的接口文件如图1所示:

图 1 对象接口对应关系表

Ø 实现COM加载项需要引入IDTExtensibility2接口对应的组件(ksaddndr.dll)

Ø 增加工具条及按钮或者其他公用部分需要引入KSO接口对应的DLL组件(kso10.dll)

Ø 实现WPS文字的二次开发需要引入WPS接口对应的文件(wpscore.dll);

Ø 实现WPS表格和WPS演示二次开发需要引入的组件(etapp.dllwpcre.dll)。

所有接口组件都是相互独立的,可以根据自己要实现的内容自由组合。

备注WPS二次开发API接口函数的说明请参考WPS二次开发API文档,在金山WPS官网上可以找到下载(http://wps.kingsoft.com

2.2. VB中实现IDTExtensibility2

新建一个ActiveX dll工程,单击“工程|引用”菜单项,勾选Kingsoft Add-in Designer 复选框,设置对库的引用。如果该库未在列表中出现,可以单击“浏览”并查找文件 ksaddndr.dll 来添加该库。默认情况下,该文件位于WPS程序安装目录的Office文件夹中。

在外接程序设计器类模块的“声明”部分,添加以下代码:

Implements IDTExtensibility2

在“代码”窗口中,单击“对象”框中的IDTExtensibility2。它将该过程的模板添加到OnConnection事件中。

在“代码”窗口中,通过单击“过程”对话框中的其它4个事件过程,为这些事件过程创建事件过程模板。

分别为这5个事件过程添加代码或注释。

注意:必须使IDTExtensibility2界面接供的每个事件中都包括该事件过程模板。如果您删除了任何事件过程,工程就将无法编译。如果不在某个事件过程模板中添加代码,最好添加一个注释;使用一个单引号 (') 就足够了。

2.3. IDTExtensibility2事件

IDTExtensibility2 库提供了 个可用来操纵加载项以及宿主应用程序的事件:OnConnectionOnDisconnectionOnAddInsUpdateOnStartupComplete 和 OnBeginShutdown。下面简单说明每个事件的含义。

2.3.1. OnConnection 事件

OnConnection 事件在 COM 加载项加载(连接)时发生。可以在OnConnection 事件中实现对WPS的操作,其中使用加载项有以下几种方式:

1.当应用程序启动时加载;

2.用户在“COM 加载项”对话框中加载加载项;

在发布的时候,注册表的LoadBehavior键值表示加载行为,通常是3(启动时加载)。如果想让用户在“COM 加载项”对话框中加载加载项的话键值是8

2.3.2. OnDisconnection 事件

OnDisconnection 事件在卸载 COM 加载项时发生。可以使用 OnDisconnection 事件过程运行能够恢复由加载项对应用程序所作任何更改的代码,或者执行常规清除操作。

卸载加载项和加载行为有对应的几种方式: 

1.用户清除“COM 加载项”对话框中加载项旁边的复选框。 

2.WPS程序关闭时卸载。如果加载项的加载行为设置为“启动”,则WPS 程序再次启动时,就会重新加载加载项。 

2.3.3. OnStartupComplete 事件

WPS程序完成启动例程时,就会发生 OnStartupComplete 事件。事件只在“启动时加载COM加载项”的加载行为下发生。如果此事件确实发生,则它将在 OnConnection 事件之后发生。

可以使用 OnStartupComplete 事件与应用程序交互、且在应用程序完成加载后才应运行的代码。例如,如果要显示一个使用户选择在启动WPS文字程序时选择公文模板的窗体,可以将该代码放到 OnStartupComplete 事件过程中。

 

2.3.4. OnBeginShutdown 事件

WPS程序关闭而 COM 加载项仍处于加载状态的情况下,如果WPS程序开始其关闭例程时就会发生 OnBeginShutdown 事件。如果此事件确实发生,它将在 OnDisconnection 事件之前发生。

用户关闭WPS程序时,可以使用 OnBeginShutdown 事件过程运行代码。例如,可以运行将窗体数据保存到某个文件的代码。

 

2.3.5. OnAddInsUpdate 事件

当一组已加载的 COM 加载项发生更改时,就会发生 OnAddInsUpdate 事件。当某个加载项加载或卸载时,就会在任何其它已加载的加载项中发生 OnAddInsUpdate 事件。例如,如果加载项 和 当前已加载,然后将加载加载项 C,则 OnAddInsUpdate 事件就会在加载项 和 中发生。如果 已卸载,则加载项 和 中再次发生 OnAddInsUpdate 事件。

根据这五个事件的触发时机可以组合使用来实现很多有用的功能,大大减小WPS二次开发的难度。

3. COM加载项的发布

为了在WPS启动的时候能够加载实现的COM加载项,需要注册组件和增加一个注册表键值。

3.0.1. 修改注册表

假设在VB中的工程名是KSAddins,类名是addintest。新建一个.reg文件,用文本编辑器打开写入下列语句:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER/Software/Kingsoft/Office/WPS/Addins/KSAddins.addintest]

"FriendlyName"="WPS Addin test"

"Description"="addintest"

"LoadBehavior"=dword:00000003

"CommandLineSafe"=dword:00000001

其中:FriendlyName是鼠标放在按钮上的提示信息,Description是按钮的显示名称,LoadBehavior加载行为(3表示启动时加载)。

用户将文件保存后,双击导入注册表。

3.0.2. 注册组件

在“开始|运行”中输入regsvr32 [组件路径],假设用户的DLL组件放在d:/ InFileFormated.dll,注册组件的命令应写为: regsvr32 d:/ InFileFormated.dll 点击确定后,提示注册成功。

3.0.3. 批处理发布

还可以使用批处理文件来简化操作。新建一个文本文件写入:

regedit /s regaddin.reg

regsvr32 InFileFormated.dll

然后保存成批处理文件格式(.bat),双击运行即可。