wps2005插件开发之旅

WPS2005插件开发二:如何屏蔽WPS菜单栏的功能添加自己的功能?

 

Word在安装的时候都自带了VBA环境可以将一些自定义的功能代码写在模板中方便的进行控制,但是由于宏代码执行存在一定的安全性问题,不同的客户端设置也不一样这样给宏代码执行可能带来一些影响,所以比较好的方法就是使用插件控制。WPS在安装的时候默认没有带VBA环境,所以写在模板或文件中的宏代码在没有VBA环境的机器上是不会执行的。所以最好的办法就是开发插件。

一.前期准备

首先新建一个DLL工程,引入KSO10.dll,这个是WPS类库文件,和ksaddndr.dll这个是插件接口需要的库文件。引入后就可以根据需要编码了。在wps2005中插件实现的接口是IDTExtensibility2它有5个方法都需要实现,当然可以根据实际情况来决定具体用那些方法。下面就用wps插件方法来实现两个功能:

a)屏蔽wps另存为按钮,执行自己的代码

b)还原用户名功能,就是在打开一个由其他用户编辑的文件后在关闭文件的时候将wps的用户信息还原为原来的用户。

二.IDTExtensibility2事件说明

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

OnConnection 事件

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

当应用程序启动时加载;

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

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

OnDisconnection 事件

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

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

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

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

OnStartupComplete 事件

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

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

 

OnBeginShutdown 事件

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

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

 

OnAddInsUpdate 事件

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

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

三.具体实现方法:

IDTExtensibility2接口有以下5个方法,方法中具体说明了执行的时间

 

1.       Implements IDTExtensibility2

2.       Private WithEvents wpsApp As wps.Application 定义一个全局变量存放wps 引用

3.       Private WithEvents wpsDoc As wps.Document  定义个wps文档

4.       Private wpsMenus As KSO.CommandBar      定义个一个工具条

Private WithEvents saveAs As KSO.CommandBarButton ‘定义一个按钮类型

5.       Private username As String ‘存放打开其他文档前的wps用户名

 

6.       Private Sub IDTExtensibility2_OnAddInsUpdate(custom() As Variant)

这个方法在已经注册过的插件修改后重新编译的时候执行

 

7.       End Sub

 

8.       Private Sub IDTExtensibility2_OnBeginShutdown(custom() As Variant)

9.       这个方法在开始关闭WPS应用的时候执行,它在方法OnDisconnection的前面执行

10.   End Sub

 

11.   Private Sub IDTExtensibility2_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)

由于这个方法中有参数APPlication即为WPS应用,对wps应用变量的赋值在这里进行

12.      Set wpsApp = Application

13.   这个方法在打开WPS应用执行

14.   End Sub

15.   Private Sub IDTExtensibility2_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)

16.   这个方法在关闭WPS应用最后执行

17.   End Sub

 

18.   Private Sub IDTExtensibility2_OnStartupComplete(custom() As Variant)

这个方法在完全打开WPS后执行。在OnConnection方法的后面执行

在这里给所有的全局变量赋值,如果写在OnConnection中是取不到值的,因为wps’’环境还没有初始化好,菜单等都是不存在的。

19.     Set wpsMenus = wpsApp.CommandBars.Item("Menu Bar")

20.     Set wpsFile = wpsMenus.Controls.Item("文件(&F)")

21.     Set saveAs = wpsFile.Controls.Item(6)

       username=wpsApp.UserName 

22.   End Sub

23.   --------------------------以下部分不是插件接口的主要方法---------------------------

24.    Private Sub saveAs_Click(ByVal Ctrl As KSO.CommandBarButton,    CancelDefault As Boolean)

25.     这个方法在点击wps文件下的另存为按钮时执行

26.       MsgBox "save as"

27.       CancelDefault=True ‘使wps自己的方法不被执行

End Sub

 

28.   Private Sub wpsApp_DocumentBeforeClose(ByVal Doc As wps.Document, Cancel As Boolean)

29.   On Error GoTo Errs:

30.   wpsApp.UserName=username ‘在关闭文档的时候将用户名恢复为刚开始打开时     候的用户名

31.   这个方法在关闭wps应用的时候执行

32.     Exit Sub

33.   Errs:

34.    MsgBox Err.Description

35.   End Sub

   四.代码说明:

     1) saveAs_ClickwpsApp_DocumentBeforeClose方法?在开始使用WithEvents对变量进行修饰所以在VB环境中在上方的列表中选择相应的变量,在右边就可以看到相应的方法了。点击可以自动生成。

  Private WithEvents wpsApp As wps.Application 定义一个全局变量存放wps 引用

Private WithEvents wpsDoc As wps.Document  定义个wps文档

Private WithEvents saveAs As KSO.CommandBarButton ‘定义一个按钮类型

    

2)        Set wpsMenus = wpsApp.CommandBars.Item("Menu Bar")

这句取到WPS的菜单栏,里面包括所有的菜单栏项

        Set wpsFile = wpsMenus.Controls.Item("文件(&F)")

        这一句取到文件菜单栏项下面包括所有的下拉项

    Set saveAs = wpsFile.Controls.Item(6)

  这一句取到文件菜单项下的第6项,在WPS中为另存为,并将这个对象赋值给savaAs变量。这样在单击另存按钮的时候就会调用saveAs_Click()方法

 

 

五.注册控件。

   将代码编译执行后先生成Dll文件,将下面代码放入记事本,注册文件信息。

Windows Registry Editor Version 5.00

 

[HKEY_CURRENT_USER/Software/Kingsoft/Office/WPS/Addins/WPSCom.Test]

"FriendlyName"="Revisionctr"

"Description"="WPS测试插件"

"LoadBehavior"=dword:00000003

"CommandLineSafe"=dword:00000001

 

       其中:FriendlyName是鼠标放在按钮上的提示信息,Description是按钮的显示名称,LoadBehavior加载行为(3表示启动时加载)。WPSCom.TestWPSCom是工程名,Test是类名。用户将文件保存后,双击导入注册表

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

七.测试

  注册成功后在wps工具àcom加载项中可以看到,在上述例子中点击文件下的另存为会弹出自己写的对话框。屏蔽了wps本身的功能。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值