Outlook COM加载项文档格式.docx
- 文档编号:22229255
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:15
- 大小:23.02KB
Outlook COM加载项文档格式.docx
《Outlook COM加载项文档格式.docx》由会员分享,可在线阅读,更多相关《Outlook COM加载项文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
Software\
Microsoft\Office\Outlook\AddIns
键下。
如果您希望用户自己选择是否加载它,那么您可以将加载项的ProgID注册到
\HKCU\
写入键中的信息包括下面的名称/值对:
Description(描述):
一个字符串,提供了COM加载项的简短描述。
FriendlyName(友好名称):
一个字符串,是在“COM加载项”对话框中显示的名称。
LoadBehavior(加载行为):
一个整数的DWORD类型,指定COM加载项的加载方式。
0表示断开、1表示连接、2表示启动时加载、8表示需要时加载,以及16表示首次连接。
你可以组合不同值来创建不同类型的加载顺序。
如,指定3,表示启动和连接时加载。
1.3.2.信任COM加载项
通过设置下面的注册表键下的DWORD值DontTrustInstalledFiles,您可以指定是否信任机器上安装的所有COM加载项:
HKCU\
Software\
Microsoft\Office\9.0\
Outlook\Security
通过将DontTrustInstalledFiles指定为0,您可以指定Outlook信任安装的所有加载项。
值1则指定不信任所有的加载项。
[版权声明:
第一章文字版权归《ProgrammingMicrosoftOutlookandExchange》一书所有,该书作者ThomasRizzo,特此声明]
2COM加载项的开发过程
本章节详细介绍了OutlookAdd-in插件的开发过程。
2.1.开发COM加载项
在VB中,首先需要引用“MicrosoftAdd-inDesigner”类型库,该库包含了一些COM加载项必需的界面。
其次,VisualBasic中需要“ImplementsIDTExtensibility2”。
更多信息
一个Office2000下的内部COM插件必须实现一个_IDTExtensibility2派发接口。
_IDTExtensibility2派发接口被定义在MSADDinDesigner类型库(MSADDNDR.dll/MSADDNDR.tlb)中,它通常位于<
盘符>
/ProgramFiles/CommonFiles/Designer下。
_IDTExtensibility2接口中必须实现下面五个接口事件函数(一般只需编写OnConnection和OnDisconnection中代码)。
2.1.1.IDTExtensibility2事件背景知识
IDTExtensibility2提供了5个将用于COM加载项的事件:
OnConnection装载插件到内存时处理(可以通过自动化在程序启动时自动装载插件)。
OnDisconnection从内存中缷载插件时处理。
OnStartupComplete当应用程序启动时插件刚装载完成时处理。
OnBeginShutdown当应用程序关闭时插件刚缷载完成时处理。
OnAddInsUpdateCOM插件改变时处理。
下面我们一一介绍这些事件:
2.1.1.1.OnConnection事件
当第一次加载或者连接加载项时,例如Outlook启动时,或者当用户选择加载COM加载项时,将调用OnConnection事件。
OnConnection事件是获取或存储稍候将要在代码中使用的Outlook的Application队形最好的地方。
当发生OnConnection事件,将传递以下四个参数:
Application参数:
是Outlook的Application的引用。
ConnectMode参数:
COM加载项的加载方式。
可以是以下常量中的一种:
ext_cm_AfterStartup,ext_cm_CommandLine,ext_cm_External或者ext_cm_Startup。
当Outlook启动时连接我们的加载项,这个参数被设置为ext_cm_Startup。
AddInInst参数:
传递引用COM加载项当前实例的对象。
Custom()参数:
一个Variant数据类型的阵列,可以存储用户定义的加载项数。
对于Office2000加载项,本参数忽略。
2.1.1.2.OnDisconnection事件
当COM加载项与应用程序断开连接时,将发生OnDisconnection事件。
当发生OnDisconnection事件,将传递以下两个参数:
RemoveMode参数:
指定加载项的断开方式,它可以被设置为以下常量:
ext_dm_HostShutdown或ext_dm_UserClosed。
顾名思义,ext_dm_HostShutdown表示加载项通过关闭主机来断开;
ext_dm_UserClosed表示用户在“COM加载项”对话框中取消选中加载项的复选框或加载项的Connect属性被设置为False时断开加载项。
可以使用OnDisconnection事件来恢复对应用程序所做的更改,或者执行常规的应用程序来清理操作。
确保撤销您创建的所有检测对象,因为如果这些对象仍旧存在,那么Outlook将无法正常关闭。
2.1.1.3.OnStartupComplete事件
对于在启动主控应用程序时连接COM加载项的情况,当主机完成所有的启动例程时,将触发OnStartupComplete事件。
如果用户在加载应用程序后从“COM加载项”选择加载项时,不会发生OnStartupComplete事件。
在这种情况下,将发生OnConnection事件。
该事件过程是将一些全局和本地变量设置为与它们相应的Outlook对象的好地方。
2.1.1.4.OnBeginShutdown事件
当应用程序将要关闭并且在OnDisconnection事件之前调用时,将触发OnBeginShutdown事件。
甚至在触发OnBeginShutdown事件之后,您仍然完全可以访问Outlook对象模型,因此您可以卸载对象之前保存注册表或者文件的设置,也可以保存对您的对象所做的修改。
2.1.1.5.OnAddInsUpdate事件
当更新COM加载项的列表时,将触发OnAddInsUpdate事件。
可以使用本事件来确保您的加载项所以来的其他加载项是连接的。
2.1.2.我们实现的IDTExtensibility2事件
2.1.2.1.IDTExtensibility2_OnConnection事件
OnConnection事件中,我们预先读取注册表,把默认参数读出来。
同时,通过调用
Setg_oApplication=Application
得到整个模型的根对象。
Disclaimers:
本文档仅供参考。
本文档所包含的信息代表了在发布之日,zhengyun对所讨论问题的当前看法,zhengyun不保证所给信息在发布之日以后的准确性。
用户应清楚本文档的准确性及其使用可能带来的全部风险。
可以复制和传播本文档,但须遵守以下条款:
1.复制时不得修改原文,复制内容须包含所有页;
2.所有副本均须含有zhengyun的版权声明以及所提供的其它声明;
3.不得以赢利为目的对本文档进行传播。
2.1.2.2.IDTExtensibility2_OnDisconnection事件
OnDisconnection事件中,我们销毁所有的全局对象。
2.1.2.3.IDTExtensibility2_OnStartupComplete事件
OnStartupComplete事件主要的工作就是,创建工具栏和按钮,如果它们不存在的话。
我们首先搜索Explorer对象的CommandBars集合,以察看我们的“短信速递”工具栏是否存在。
如果找到该工具栏,则只需使之可见。
如果没有找到我们的工具栏,那么我们将创建工具栏:
通过传递命令栏的名称及Temporary参数,代码将把新的CommandBar对象添加到CommandBars集合中。
Temporary参数指出Outlook应该在Outlook会话间保持命令栏。
然后,代码开始创建命令上的按钮。
为了创建按钮,代码将使用CommandBars对象的Controls集合。
然后,代码将把2个按钮控件添加到集合中。
控件类型是由msoControlButton常量来标识的。
代码还将为所有控件传递ID1;
表示这个控件是自定义控件而不是内置控件。
代码还将传递Temporary参数并将它设置为False,以使Outlook在会话间保持按钮。
代码接收到来自于Control集合Add方法的CommandBarButton对象之后,它将开始设置CommandBarButton对象的属性:
◆
Caption属性:
控件的默认屏幕提示;
FaceId属性:
指定按钮的外观。
Style属性:
比如,显示按钮外观和标题文本的msoButtonIconAndCaption。
您看到,我们前面声明g_oCreateSMSBHandler使用WithEvents关键词,被声明为Office.CommandBarButton,
它指出g_oCreateSMSBHandler用来响应CommandBarButton的事件。
2.1.2.4.IDTExtensibility2_OnBeginShutdown事件
OnBeginShutdown事件中,我们销毁所有的全局对象。
2.2.全局引用的变量
在VB中,我们需要使用一些Outlook中的对象模型。
下面我们一一列出:
2.2.1.Application对象
这是整个模型的根对象。
根对象提供对其他对象模型的访问。
在Outlook中使用VBA时,Application对象被隐含声明,
这样您可以选择是否使用Application关键字。
2.2.2.NameSpace对象
用于访问存储项目(如文件夹)。
“MAPI”是唯一可以使用的名称空间。
2.2.3.Explorer对象
这是显示Outlook项目集合的默认界面。
每个不同的项目类型都有不同的浏览器。
2.2.4.CommandBars集合
在Office应用程序中,尽管菜单和工具栏按钮看上去不太一样,但实质上它们是相同类型的对象。
CommandBars集合包含程序中的所有命令条,如:
工具条和菜单条。
每一个CommandBars集合都有一个CommandBar对象和它对应,CommandBar对象可以包含其它的CommandBar对象,这些对象是作为按钮或菜单命令来用的。
每一个CommandBar都将通过CommandBarControls对象被引用,
CommandBarControls又可以包含一组CommandBarControl对象。
每一个CommandBarControl可以包含一个CommandBar对象,并可以通过它来存取控件属性。
每一个CommandBarControl对象,实际是对应CommandBarControls中的控件集合。
CommandBarControl可以有三种表现形式:
⏹
弹出式(CommandBarPopup):
相当于菜单条的一个菜单项?
组合框(CommandBarComboBox):
类似于工具条中组合框控件。
它包括一个工具栏和紧接着工具栏的一个下拉箭头。
单击该按钮,将显示出更多的带图标的菜单命令。
按钮(CommandBarButton):
相当于标准的工具栏按钮,即带有图标的按钮。
2.2.5.Items集合
Items对象集合包括指定文件夹中所有Item条目对象。
其中,
Item对象用于包含特定的Outlook数据,例如电子邮件消息、约会或联系人。
Outlook.AppointmentItem日程的条目对象
Outlook.ContactItem联系人的条目对象
Outlook.MailItem邮件的条目对象
Outlook.NoteItem便笺的条目对象
2.2.6.Selection集合
Selection对象包括在用户界面中用户选定的项目组。
2.3.处理按钮事件
在VB中,我们需要填写类似于“g_oCreateSMSBHandler_Click”函数,对按钮的点击作出响应。
下面我们一一列出两个按钮的事件:
2.3.1.g_oCreateSMSBHandler_Click事件
这个按钮的名称是“创建短信”。
“联系人列表”将从您的Outlook联系人中读取,只显示那些提供了移动电话号码的联系人。
您点击某一个联系人,我们把这个联系人加入“收信人手机号码”的编辑框中。
本事件主要的事情就是,弹出一个“发送短信”的对话框。
并取出联系人中设置了移动号码的。
其他的细节我们就不再介绍了,介绍一下默认Outlook联系人的获取问题:
首先我们通过
SetolContacts=g_oNS.GetDefaultFolder(olFolderContacts).Items
获得默认的联系人文件夹的Items集合。
然后,用
ForEacholContactInolContacts
遍历这个Items集合。
这个集合中的每一个对象都应该是一个“Outlook.ContactItem”Item对象。
所以我们可以获得这个Item对象的显示名称和移动手机号码。
我们只显示那些拥有移动手机号码的联系人。
代码如下所示:
'
准备取出联系人中带有移动号码的作为收信人:
'
DimolContactsAsOutlook.Items
DimolContactAsOutlook.ContactItem
GetDefaultFolder方法基于FolderType参数返回默认的文件夹
(例如,olFolderInbox常量将“收件箱”文件夹返回给当前登录的用户)。
我们现在选择进入的是:
包含ContactItem对象和DistListItem对象的“联系人”文件夹(olFolderContacts)。
SetolContacts=g_oNS.GetDefaultFolder(olFolderContacts).Items
frmMenuMain.listContact.Clear
DimnIndexAsInteger
DimszContactItemAsString
nIndex=0
OnErrorResumeNext
遍历每一个联系人:
ForEacholContactInolContacts
IfLen(olContact.MobileTelephoneNumber)=11Then
联系人的显示名称:
szContactItem=Replace(olContact.FileAs,"
["
"
"
)
szContactItem=Replace(szContactItem,"
]"
联系人的移动号码:
frmMenuMain.listContact.AddItemszContactItem&
"
&
_
olContact.MobileTelephoneNumber&
nIndex
nIndex=nIndex+1
EndIf
Next
OnErrorGoTo0
第二章部分文字引用自《ProgrammingMicrosoftOutlookandExchange》一书,该书作者ThomasRizzo,特此声明]
RevisionHistory:
Version
Date
Creator
Description
1.0.0.1
2004-3-9
郑昀
草稿
2.3.2.g_oForwardBHandler_Click事件
这个按钮的名称是“转发”.
这个对话框中的内容将根据您选中的上下文而定,更详细内容参见下面章节。
简单的说,我们将根据您选中的项是邮件,还是便笺,或者日程,或者联系人,智能显示发送内容。
“联系人列表”将从您的Outlook联系人中读取。
第一个问题,如何确定当前用户选中的项是什么类型,邮件,还是联系人?
SetoSelection=g_oExplorer.Selection
得到当前用户所选择的项。
如果oSelection是Nothing,那么表明用户没有选中任何东西。
ForEachoItemInoSelection
遍历这个Selection集合。
这个集合中的每一个对象都应该是一个Item对象。
我们可以通过这个Item对象的“MessageClass”属性获知它是什么。
它可能是:
IPM.Note邮件
IPM.Contact联系人
IPM.StickyNote便笺
IPM.Appointment日程
对于不同类型Item对象,我们获取它的不同属性。
------------------------------------------------------------------
如果选中了一项:
那么首先判断是否是一封邮件,即oItem.MessageClass是"
IPM.Note"
ForEachoItemInoSelection
IfoItem.MessageClass="
Then
getthecurrentmailitem
DimoCurMailAsOutlook.MailItem
SetoCurMail=oItem
szContent="
主题:
oCurMail.Subject&
vbCrLf
那么其次判断是否是一个联系人,即oItem.MessageClass是"
IPM.Contact"
ElseIfoItem.MessageClass="
DimoCurContactAsOutlook.ContactItem
SetoCurContact=oItem
那么其次判断是否是一个便笺,即oItem.MessageClass是"
IPM.StickyNote"
getthecurrentnoteitem
DimoCurNoteAsOutlook.NoteItem
SetoCurNote=oItem
那么其次判断是否是一个日程,即oItem.MessageClass是"
IPM.Appointment"
getthecurrentappointmentitem
DimoCurAppoAsOutlook.AppointmentItem
SetoCurAppo=oItem
Next
2.4.处理属性页事件
在VB中,我们需要编写NameSpace对象和Application对象的OptionsPageAdd事件,来增加一个我们自定制的属性页,如下所示:
2.4.1.g_oNS_OptionsPagesAdd事件
它隶属于NameSpace对象。
当用户单击我们正在监控的名称区的文件夹,然后选择了“属性”时,将触发NameSpace对象的OptionPagesAdd事件。
本事件有两个参数,含义是:
Pages是Outlook属性页的一个集合;
Folder它是用户正试图检索其属性的文件夹。
首先,通过调用
SetoNewPage=CreateObject("
TomosoftP.AdminPage"
创建对象,这是一个我们编写的ActiveX控件,实际上就是添加到PropertyPages集合中的子例程的属性页。
其次,为我们创建的属性页传递默认数值。
然后,通过把自身对象的引用进行:
oNewPage.oAdmin=Me
将我们加载项的对象自身传递给新
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Outlook COM加载项 COM 加载