from: 微软

Microsoft Office InfoPath 2007 支持用于扩展表单编辑用户体验的 COM 加载项。尽管这是 Office InfoPath 2007 的新功能,但其他 Office 应用程序(如 Microsoft Office Word 和 Microsoft Office Excel)从 Office 2000 起就已经支持 COM 加载项。

Office InfoPath 2007 中的 COM 加载项支持在表单编辑环境中可用。无法通过使用 COM 加载项来扩展表单设计环境。

IDTExtensibility2 接口

InfoPath 编辑环境提供了对 IDTExtensibility2 接口的支持,该接口是 COM 加载项开发人员所必须实现的。IDTExtensibility2 是一种双接口对象,它提供了五个在编辑环境内充当事件的方法。这些方法允许 COM 加载项对下表中列出的环境启动和关闭条件进行响应。

接口 说明
OnAddInsUpdate (ByVal custom() As Variant) 在环境中加载或卸载加载项时发生。
OnBeginShutdown (ByVal custom() As Variant) 在环境正在关闭时发生。
OnConnection(ByVal Application As Object, ByVal ConnectMode As ext_ConnectMode, ByVal AddInInst As Object, ByVal custom() As Variant) 在环境中加载加载项时发生。
OnDisconnection (ByVal RemoveMode As ext_DisconnectMode, ByVal custom() As Variant) 从环境中卸载加载项时发生。
OnStartupComplete (ByVal custom() As Variant) 在环境已完成启动时发生。

注册 COM 加载项

所有 Office 应用程序(包括 InfoPath)都使用注册表来列出 COM 加载项集合中的加载项、存储连接状态,以及存储引导或按需加载信息。对于 InfoPath COM 加载项,每个加载项的名称都出现在以下注册表项之下:

HKEY_CURRENT_USER\Software\Microsoft\Office\InfoPath\AddIns\

对于安装为可供客户端计算机的每个用户使用的 COM 加载项,该注册表项位于 HKLM 注册表配置单元中:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\InfoPath\AddIns\

注册表项名称对应于加载项的 ProgIdAttribute,并包含以下值。

名称 类型 说明
FriendlyName String 将出现在“COM 加载项”对话框中并列在信任中心的“加载项”页面中的名称。
Description String 在信任中心中选择加载项时将出现的字符串。
LoadBehavior DWORD 指定 COM 加载项的加载方式。值可以是 0、1、2、8 和 16 的组合。有关详细信息,请参阅下表。

LoadBehavior 的 DWORD 值应包含一个描述 COM 加载项在编辑环境中如何加载的值。该值可以是下表中的值,或下表中各个值的组合。例如,某个在 Visual Studio 2005 中创建的 COM 加载项的 LoadBehavior 值将为“3”:在应用程序启动时加载,并且已连接。

说明
0 已断开连接。加载项在“COM 加载项”对话框中显示为“非活动”。
1 已连接。加载项在“COM 加载项”对话框中显示为“活动”。
2 启动时加载。在宿主应用程序启动时加载和连接加载项。
8 按需加载。当宿主应用程序需要加载项时,例如,当用户单击使用加载项中的功能的按钮时,将会加载和连接加载项。
16 第一次运行时连接。当用户在注册加载项后第一次运行宿主应用程序时,将会加载和连接加载项。

 

使用 Visual Studio 2005 创建托管 COM 加载项

要使用 Microsoft Visual Studio 2005 创建托管 COM 加载项,请按如下方式创建一个 Visual Studio 共享加载项项目:

  1. 单击“开始”,指向“所有程序”,指向“Microsoft Visual Studio 2005”,然后单击“Microsoft Visual Studio 2005”
  2. “文件”菜单上单击“新建项目”
  3. “新建项目”对话框的“项目类型”窗格中,单击“其他项目类型”文件夹,然后单击“扩展性”
  4. “模板”窗格中,单击“共享的外接程序”
  5. “名称”框中,为共享的外接程序项目键入一个名称。
  6. “位置”框中,键入文件夹路径,或单击“浏览”并选择文件夹路径,然后单击“确定”。将出现“共享外接程序向导”
  7. “共享外接程序向导”中单击“下一步”。将出现“选择编程语言”页面。
  8. 单击“使用 Visual Basic 创建外接程序”,然后单击“下一步”。将出现“选择应用程序主机”页面。
  9. 取消选中除“Microsoft InfoPath”外的每个应用程序旁边的框,然后单击“下一步”。将出现“输入名称和说明”页面。
  10. “外接程序的名称”框中,键入 COM 加载项的名称。
  11. “外接程序的说明”框中,键入 COM 加载项的说明,然后单击“下一步”。将出现“选择外接程序选项”页面。
  12. 选中“我希望在加载宿主应用程序的同时加载我的外接程序”“我的外接程序应可供安装有外接程序的计算机的所有用户使用,而不仅仅是安装该外接程序的人员”框。
  13. 单击“下一步”以查看“摘要”页面,然后单击“完成”

 

在 Visual Studio 创建了项目后,您将在“解决方案资源管理器”窗口中看到两个项目。第一个项目是 COM 加载项的项目;第二个项目是用于部署 COM 加载项的安装项目。“共享外接程序向导”只会插入对 Microsoft Office 12.0 对象库的引用,因此必须使用以下步骤插入对 InfoPath 对象库的引用:

  1. 双击“我的项目”以显示加载项项目属性。单击“引用”选项卡以显示自动添加到项目的引用。
  2. 单击“添加”按钮以显示“添加引用”对话框。
  3. “.NET”选项卡上,双击“Microsoft.Office.Interop.InfoPath”,然后单击“确定”

  注释
要创建非托管 COM 加载项,请参阅 MSDN Library 中的创建 Microsoft Office 2000 COM 加载项

 

查看注册表设置

要查看将在安装 COM 加载项时创建的注册表设置,请按以下步骤进行操作:

  1. “解决方案资源管理器”中右键单击安装项目的根节点,单击“查看”,再单击“编辑器”,然后单击“注册表”
  2. 在左侧窗格中,单击加号以展开 HKEY_LOCAL_MACHINESoftwareMicrosoftInfoPath,然后展开 AddIns
  3. 单击与共享加载项项目的 ProgID 相对应的名称。

 

要更改任何这些属性,请右键单击属性,单击“属性窗口”,然后在“属性窗口”中更改“值”框。

编译和分发共享的加载项

要编译托管 COM 加载项以便在开发共享加载项项目的计算机上进行测试,请在“解决方案资源管理器”中右键单击共享加载项项目的根节点,然后单击“生成”。如果项目生成过程没有错误,您可以启动 InfoPath 编辑环境并开始使用托管 COM 加载项。如果有 InfoPath 的实例正在运行,请在生成项目之前将其关闭。还可能必须要打开“COM 加载项”对话框以验证 COM 加载项是否已注册。要打开“COM 加载项”对话框,请按以下步骤进行操作:

  1. 打开 InfoPath 编辑环境。进行此操作最简单的方式是打开一个现有表单模板,这样将会基于该表单模板创建一个新表单。
  2. “工具”菜单上,单击“信任中心”
  3. 单击左边的“加载项”类别。
  4. 在靠近“信任中心”对话框底部的“管理”部分中,从列表中选择“COM 加载项”,然后单击“搜索”按钮。
  5. “COM 加载项”对话框中,您将看到最近生成的加载项的名称,并且旁边应有一个复选框。如果旁边没有复选框,则 COM 加载项由于错误而加载失败,该错误将列在对话框的“加载行为”部分中。

 

要编译托管 COM 加载项以便在不是开发共享加载项项目的计算机的另一台计算机上使用,您必须执行额外的步骤以保证代码的安全。有关保护共享加载项项目以便在其他计算机上使用的信息,请参阅以下三篇文章:

  注释
如果尚未在目标计算机上安装 .NET Framework 或安装项目中的其他必需程序集,则 .msi 文件可能未正常安装。同时,您无法分发 .msi 文件并随后尝试安装 .msi 文件。您还必须在与 Visual Studio 所生成原始 .msi 文件相同的文件夹中分发其他支持文件。

 

在 COM 加载项中编码

COM 加载项可捕获 InfoPath 表单编辑环境中发生的应用程序事件。COM 加载项可以使用 ApplicationEvents 对象中的以下事件来响应用户操作:

事件 说明
NewXDocument 在创建新表单时发生。
Quit 在用户退出 InfoPath 时发生。
WindowActivate 在激活任何文档窗口时发生。
WindowDeactivate 在任何文档窗口成为非活动窗口时发生。
WindowSize 在对任何文档窗口进行大小调整或移动时发生。
XDocumentBeforeClose 在任何打开的文档即将关闭之前发生。
XDocumentBeforePrint 在即将打印任何打开的文档之前发生。
XDocumentBeforeSave 在即将保存任何打开的文档之前发生。
XDocumentChange 在创建新表单,打开现有表单或激活其他表单时发生。
XDocumentOpen 在打开文档时发生。

 

要在 COM 加载项中捕获这些事件,您必须在 Connect 类中声明以下类级别变量:

Private InfoPathApplication As Microsoft.Office.Interop.InfoPath._Application3
            Private WithEvents InfoPathApplicationEvents As Microsoft.Office.Interop.InfoPath.ApplicationEvents
            
在第一行中,_Application3Application 对象的最新版本,并且必须显式声明,因为 Application 对象不包括 Events 属性。第二行在 InfoPathApplicationEvents 变量的声明中包括 WithEvents 关键字,并且 InfoPathApplicationEvents 对象(“订阅者”)必须要有该行才能从 InfoPath 应用程序(“发布者”)处接收事件。

 

OnConnection 过程中,您将需要以下两行:

InfoPathApplication = DirectCast(application, Microsoft.Office.Interop.InfoPath._Application3)
            InfoPathApplicationEvents = DirectCast(InfoPathApplication.Events, Microsoft.Office.Interop.InfoPath.ApplicationEvents)
第一行将加载项收到的普通 application 对象转换为 _Application3 对象。第二行将 _Application3 对象(由 InfoPathApplication 变量表示)的 Events 属性转换为 ApplicationEvents 对象。

 

要创建事件处理程序,请从 Visual Studio 窗口顶部的“类名”下拉框中选择 InfoPathApplicationEvents,然后在 Visual Studio 窗口顶部的“方法名称”下拉框中选择要处理的事件。例如,如果需要控制在何时保存表单,则处理 XDocumentBeforeSave 事件。从“方法名称”下拉框中选择 XDocumentBeforeSave 将会自动插入以下过程:

Private Sub InfoPathApplicationEvents_XDocumentBeforeSave(ByVal pDocument As Microsoft.Office.Interop.InfoPath._XDocument, ByRef pfCancel As Boolean) Handles InfoPathApplicationEvents.XDocumentBeforeSave
            End Sub

 

COM 加载项可以使用相同方法处理 ApplicationEvents 对象的任何事件。

用于开发 COM 加载项的其他资源

以下列表包括了用于了解有关 COM 加载项的详细信息的链接,以及为 Office 应用程序创建 COM 加载项的分步示例。

 

© 2006 Microsoft Corporation。保留所有权利。

posted on 2007-11-02 15:17  Dragon-China  阅读(876)  评论(2编辑  收藏  举报