65.9K
CodeProject 正在变化。 阅读更多。
Home

Outlook 插件编程 - 第一部分

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.77/5 (3投票s)

2007年10月7日

CPOL

4分钟阅读

viewsIcon

57499

downloadIcon

747

本文介绍 Outlook 编程。

引言

本文讨论如何用 C# 编程 Outlook 插件,并解释 Outlook 对象模型。

背景

实际上我计划写 三篇关于 Outlook 插件的文章。在这第一篇文章中,我将解释基本概念和 Outlook 对象模型,然后逐步过渡到编程部分。这第一篇文章只解释初步的知识,不涉及高级主题。我使用了 Visual studio 2008 Beta 版来创建演示代码。

Using the Code

在深入代码之前,我们将先了解一些关键字和 Outlook 对象模型。

Outlook 应用程序是一个基于 COM 的服务器。当 .NET 开发者需要使用 COM 进行编码时,开发者需要了解 PIA(Primary Interop Assembly)。微软在安装 Office 时已经提供了 PIA。在开发过程中,您将您的托管代码编写在互操作程序集(IA)之上。这是 COM 类型库的托管 .NET 等效物。有几种获取互操作程序集的方法,并且有一些部署问题需要我们考虑。在构建代码后,运行时,CLR 会在您的托管代码和您正在交互的 Office 组件之间放置一个代理。运行时,当您从托管代码调用(非托管)Office 函数时,CLR 会为您执行许多操作。其中最重要的一项是封送。封送会获取您在托管方法调用中传递的参数值,并将它们传递给底层的非托管方法。任何互操作程序集最终目标是提供看起来和感觉都与原始 COM 类型相似的 .NET 类型。互操作层(结合运行时生成的代理,称为 Runtime Callable Wrapper,或 RCW)会处理各种数据类型封送的细节。例如,如果一个接口方法被定义为接受一个基于 COM 的 BSTR 参数,.NET 开发者可以自由地传递一个基于 CLR 的 System.String

Outlook 对象模型

Outlook 对象模型是一个组织得非常好的对象列表。这些对象被排列并利用通用的设计和模式。主要对象是 Application,它是所有其他对象的根。一旦我们获得这个对象,我们就可以控制 Outlook 应用程序。内部来说,这只不过是 Outlook 应用程序的一个实例。
其他一些对象包括

  1. 电子邮件项
  2. 联系人
  3. 分发列表
  4. 日历
  5. 约会
  6. 任务.....等等。

现在我们进入编程部分。Visual Studio 在安装时已经添加了一个“共享外接程序”项目向导。

要创建新的 Outlook 外接程序:

  1. 打开一个新的 Visual Studio 项目。
  2. 选择“其他项目类型”,然后选择“共享外接程序”项目。
  3. 这将引导您通过一个对话框向导。
    我已经创建了一个名为 OutlookAddButton 的项目。
  4. 选择编程语言为 C#。
  5. 选择应用程序主机为 Outlook。
  6. 输入外接程序名称和外接程序描述。
  7. 选择外接程序选项。

现在 Visual Studio IDE 将有两个项目,一个名为 OutlookAddButton,另一个名为 OutlookAddButtonSetup。实际上我们只会在 OutlookAddButton 中编写代码,但对于安装和设置,我们可以自定义 OutlookAddButtonSetup 项目。

现在我们将向 Outlook 标准命令栏添加一个命令按钮。当我们查看 OutlookAddButton 的代码时,可以看到通过对话框向导创建的主要类 Connect。这个类是 Outlook 外接程序编程的心脏。这个类继承了名为 IDTExtensibility2 的接口。
connect 类有两个 private 实例,一个名为 applicationObject,另一个名为 addInInstance

  • applicationObject 就是 Outlook 应用程序实例
  • addInInstance 是外接程序项目实例

Connect 类 - 成员

OnConnection() 当您的外接程序连接到主机时,将调用此方法。
OnDisconnection() 当外接程序正在从主机断开连接时,将调用此方法。
OnAddInsUpdate() 如果最终用户向主机插入或删除外接程序,将调用 OnAddInsUpdate() 方法。
OnStartupComplete() 主机应用程序完成加载后,将调用此方法。
OnBeginShutdown() 当主机正在关闭过程中时,将调用此方法。

我将在下一篇文章中更详细地介绍这个类。

首先,我们将查看这个示例应用程序。这个应用程序将在 Outlook 标准命令栏中添加一个命令按钮。当您单击它时,它将简单地显示一个消息。首先,向 OutlookAddon 项目添加一个引用。转到解决方案资源管理器,然后单击“添加引用”。

Screenshot - AddReference.jpg

public void OnStartupComplete(ref System.Array custom) {
    CommandBars cmdBars = applicationObject.ActiveExplorer().CommandBars;
    try {
        btnHello = (CommandBarButton)cmdBars["standard"].Controls["Hello"];
    } catch (Exception e) {
        btnHello = (CommandBarButton)cmdBars.Add(1,
                    System.Reflection.Missing.Value,
                    System.Reflection.Missing.Value,
                    System.Reflection.Missing.Value);
        btnHello.Caption = "Hello";
        btnHello.Style = MsoButtonStyle.msoButtonCaption;
    }
    btnHello.Visible = true;
    btnHello.Click += new _CommandBarButtonEvents_ClickEventHandler(btnHello_Click);
}

void btnHello_Click(CommandBarButton Ctrl, ref bool CancelDefault) {
    System.Windows.Forms.MessageBox.Show
	("Hello, \n Welcome to Outlook addon programming");
}

请参考随附的示例代码以获取思路。

安装

在同一个解决方案中,您会找到另一个名为 OutlookAddonButtonSetup 的项目,该项目用于创建用于安装的 MSI 包。(很酷,对吧?)转到解决方案资源管理器,右键单击项目,然后选择“重新生成”。重新生成后,您可以在文件夹中找到 MSI 包。如果您想安装,只需单击安装菜单。这将把外接程序安装到 Outlook。

关注点

我将在第二篇文章中提供更多详细信息。

历史

  • 2007 年 10 月 7 日:初次发布
© . All rights reserved.