高峰之巅 发表于 2015-9-12 13:22:44

Outlook中的Add-In (By VB6)

最近正好有一个项目是关于outlook的。客户需要把outlook和其他系统集成到一起。我们希望的解决方案当然是用c#去做。但是由于种种原因,项目最终只能使用vb作,还是vb6那一代(即使是用VB.net也会简单一些)。
信息服务就是这样,我们得根据客户的需求来,他们出于成本和稳定性的考虑,决意试用一种方案,我们就得做出妥协。并且,他们的Outlook版本很低(升级outlook的成本太高)。他们对于新技术的稳定性也是有点怀疑(昨天MS的演示会上,好几个Demo跑不起来就是个例子)。
Outlook是2000版,VB6开发之(得重新拾起这个工具了,只是不知道这张旧船票能否登上客户这条怪船?)。
首先从网上找到了一些资料,给出了一个基本的解决方法:
1:建立VB的AddIN项目
2:对项目添加Office引用(Outlook及其他)
3:对Connect的特定的几个事件作出处理(OnConnect,OnDisConnect等)
但是,这段代码明显是找错了,因为他根本运行不起来。它面向的好像是VB自己的AddIN。但是基本原理可以看出来,就是这个样子的。
后来从网上找到这样一个VB6的模版,才明白问题出在那里:获得的对象需要用专门的Outlook.Application接收(olApp As Outlook.Application)。其他的变化不大。经过这样的修改,Outlook中终于出现了我的AddIn。
值得注意的一个就是Connect的OnInitial Load Behavior属性。调试的时候一般选择Startup(每次都执行),发布的时候要选择Load on next startup only(执行一次),这是因为我需要在outlook中加入自己的菜单,这个菜做是一次性的。
剩下的问题就是
1:如何在OutLook中添加自己的菜单
2:如何给菜单加入事件相应。
3:如何访问/改写本地OutLook的信息
4:安装/卸载
增加菜单似乎并不难,就是要找到Application中的菜单栏,并且加入自己的菜单。



1    Set objCB = olApp.ActiveExplorer.CommandBars("Menu Bar") ‘ 找到App的MenuBar
2
3    Dim mainMenu As CommandBarPopup’ 定义为可以弹出其他菜单的菜单
4
5    Set mainMenu = objCB.Controls.Add(msoControlPopup, , , objCB.Controls("Help").Index) ‘ 定义其位置。放在Help之前
6
7    mainMenu.Caption = "Test Menu"
8
9
    给菜单加入事件处理。这个可能是很简单的了,但是真得忘记了怎么做了(大学里学的那点皮毛确实不够用),几经测试,才做到
   

1Dim WithEvents mn_Cmd1 As Office.CommandBarButton’ 定义. 注意WithEvents和CommandBarButton类型
2
3
       //设置


Set mn_Cmd1 = mainMenu Controls.Add(msoControlButton) ’ 这是一个可移执行的命令菜单

mn_Cmd1.Caption = "Cmd1"


    //给出事件处理


1Private Sub mn_Cmd1_Click()Sub mn_Cmd1_Click(ByVal Ctrl As Office.CommandBarButton, ByRef CancelDefault As Boolean)
2
3   MsgBox Ctrl.Caption
4
5End Sub   
6
7
访问/改写本地outlook是比较麻烦的一个。因为我一直觉得这样会有安全问题。但是结果比较好:每次访问Outlook的时候,Outlook会给出提示,询问这个程序访问Outlook的权限和时间。


1 msg = "there are totally" & objOutlook.Session.AddressLists.Item("Contacts").AddressEntries.Count
2 msg = msg + " address in ur address list."
3 If objOutlook.Session.AddressLists.Item("Contacts").AddressEntries.Count > 0 Then
4   msg = msg + "and the first one is "
5   msg = msg + objOutlook.Session.AddressLists.Item("Contacts").AddressEntries.Item(1).address
6 End If
7
8Me.lbInfo.Caption = msg
9
10
然后就是给菜单都加上具体的实现了,这个不再赘述。
。。。。。
最后的事情就是如何安装和卸载这个AddIn了。安装有两种方法:
    第一,可以注册组件,也就是regsvr32 xxx.dll;
    第二,可以在outlook中的菜单中加入(Tool/Com Add-INs)。
    卸载也是差不多的:可以在菜单中reset(Tool/Customize/ToolBars/MenuBar Reset);regsrv /u xxx.dll应该也可以。
页: [1]
查看完整版本: Outlook中的Add-In (By VB6)