如何使用 Visual Basic.NET 建置為 Office COM 增益集

文章翻譯 文章翻譯
文章編號: 302896 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

Microsoft Office 2000 和更新版本的支援新的統一設計架構建置應用程式增益集增強,並控制 Office 應用程式。這些增益集稱為 COM 增益集。本文將逐步討論 Office COM 增益集,並說明如何建置 Office COM 增益集使用 Microsoft Visual Basic.NET。

IDTExensibility2 介面

COM 增益集是一種同處理序 COM 伺服器或 ActiveX 動態連結程式庫 (DLL) 實作 IDTExensibility2 介面,Microsoft 增益功能設計工具型別程式庫 (Msaddndr.dll) 中所述。所有 COM 增益集從這個介面繼承和必須實作每五個的方法。

OnConnection

連線 COM 增益集時,就會引發 OnConnection 事件。增益集可能連接上啟動,結束] 使用者或 「 自動化 」。如果順利傳回 OnConnection,增益集是稱為載入。如果傳回錯誤訊息,則主應用程式立即釋放其增益集的參考並終結物件。

OnConnection 採用下列四個參數:
  • 應用程式-主機應用程式物件的參考。
  • ConnectMode-指定增益集連接方式的常數。增益集可以透過下列方式連線:
    • ext_cm_AfterStartup-的增益集是由使用者從 [COM 增益集] 對話方塊啟動。
    • 從命令列連接 ext_cm_CommandLine-的增益集。請注意這不適用建置 COM 增益集的 Office 應用程式。
    • ext_cm_External-的增益集是由 「 自動化 」 外部應用程式連接。請注意這不適用建置 COM 增益集的 Office 應用程式。
    • ext_cm_Startup-的增益集是由主機應用程式啟動時啟動。這種行為是由登錄中設定所控制。
  • AddInInst-A COMAddIn 物件參照到這個增益集 COMAddIns 集合為主機應用程式中的參照。
  • 自訂-可以保留使用者定義資料的 Variant 型別值的陣列。

OnDisconnection

當 COM 增益集已中斷連線並只在它從記憶體卸載之前,就會引發 OnDisconnection 事件。增益集應該在這種情況下執行任何的清除的資源,並應該可以還原對主應用程式所做的任何變更。

OnDisconnection 採用下列兩個參數:
  • RemoveMode-指定如何增益集已中斷連線的常數。增益集可以被中斷以下列方式:
    • 主應用程式關閉時,會中斷連接 ext_dm_HostShutdown-的增益集。
    • 藉由一般使用者或某個自動化中斷連接 ext_dm_UserClosed-的增益集在控制站。
  • 自訂-可以保留使用者定義資料的 Variant 型別值的陣列。

OnAddInsUpdate

OnAddInsUpdate 事件引發時的一組註冊 COM 增益集的變更。亦即每次 COM 增益集是安裝或移除從主應用程式,會引發這個事件。

OnStartupComplete 和 OnBeginShutdown

同時,當主應用程式已離開或正在進入的狀態中哪一個使用者互動應予以避免因為應用程式忙碌中載入或卸載本身從記憶體時所呼叫 OnStartupCompleteOnBeginShutdown 方法。如果增益集已連接啟動,期間,而如果主應用程式在關機期間中斷增益集,只被呼叫 OnBeginShutdown,只會呼叫 OnStartupComplete

因為這些事件引發時,主應用程式使用者介面是完全使用中,它們可能是唯一的方法執行某些動作,否則就是從 OnConnectionOnDisconnection 無法使用。

COM 增益集登錄

除了標準的 COM 登錄 COM 增益集需要與它執行每個 Office 應用程式登錄自己。若要以特定的應用程式註冊本身,增益集應該建立子機碼,使用其 ProgID 當作機碼下下列位置的名稱:
HKEY_CURRENT_USER\Software\Microsoft\Office\ OfficeApp \Addins\ ProgID
增益集可以提供易記顯示名稱和完整描述這個索引鍵位置的值。在另外增益集應該指定其您想要的載入表現方式藉由使用稱為
LoadBehavior
的 DWORD 值。這個值會決定如何增益集載入在主應用程式,而且由下列值的組合所組成:
  • 0 = 中斷連線-不是已載入。
  • 1 = 已連線-是載入。
  • 2 = bootload-應用程式啟動時載入。
  • 8 = demandLoad-只在使用者需要時才載入。
  • 16 = ConnectFirstTime-載入一次 (在下一個啟動)。
一般指定的值是 0x03 (已連線 | Bootload)。

增益集,實作 IDTExtensibility2 還應指定呼叫
CommandLineSafe
,表示增益集是安全的作業,並不支援使用者介面的 DWORD 值]。值為 0x00 表示 False,而值為 0x01 表示為 True。

如何使用 Visual Basic.NET 建置 COM 增益集

稍早提到的 Office COM 增益集是在處理序 COM 啟動的 Office 應用程式透過 COM 執行階段層的伺服器。因此,一個 COM 增益集在 Visual Basic.NET 開發需要增益集元件是在.NET 中實作和再公開給 COM 用戶端 (也就是 Office 應用程式) 透過 COM Interop 層。

在 Visual Basic.NET 中建立 COM 增益集,請依照下列步驟執行:
  1. 在 Visual Basic.NET 中建立類別庫專案。
  2. 加入實作 IDTExtensibility2 型別程式庫的參考。已經使用名稱 擴充性 下此主要 Interop 組件。
  3. 加入 Microsoft Office 物件程式庫的參考。已經使用名稱 Office 下此主要 Interop 組件。
  4. 在實作 IDTExtensibility2 類別庫中建立公用類別。
  5. 類別之後建置程式庫、 註冊 COM Interop 程式庫。若要這麼做,產生增強式具名組件,這個類別庫,然後註冊 COM Interop 與]。您可以使用 Regasm.exe 註冊 COM Interop 的.NET 元件。
  6. 建立登錄項目,讓 Office 應用程式可以辨認並載入增益集。
您可以選擇完成所有這些步驟,或者您可以建立的型別 共用增益集 的.NET 專案。這會啟動可協助您在.NET 中建立 COM 增益集的 [擴充性] 精靈] 時。

「 擴充性精靈 」 會建立連同實作 IDTExtensibility2 介面的 連線 類別的 Visual Basic.NET 類別庫專案。也會產生基本架構實作的 IDTExtensibility 空成員的程式碼。這個專案具有擴充性和 Office 組件的參考。專案的組建設定有 註冊 COM Interop 選取。組件金鑰 (.snk) 檔案,就會產生,且參考中 Assemblyinfo.vb AssemblyKeyfile 屬性中。

與類別庫專案一起精靈會產生安裝專案,您可以使用 [COM 增益集在其他電腦上部署。如果需要的話,您可能會移除這個專案。

雖說是逐步範例

  1. 在 Microsoft Visual Studio.NET 中的 [檔案] 功能表上按一下 [新增],然後按一下 [專案]。
  2. 在 [新增專案] 對話方塊展開 [專案類型] 下的 其他專案、 選取 擴充性專案,] 然後選取 [分享增益功能 範本]。
  3. 鍵入 MyCOMAddin 作為增益集,名稱然後按一下 [確定]
  4. 當 「 擴充性精靈 」 便會出現,請依照下列步驟執行:
    1. 第 1 頁上 建立增益功能中使用 Visual Basic,選取然後按一下 [下一步]。
    2. 在第二頁上選取下列主應用程式,然後再按一下 [下一步]:
      • Microsoft Word
      • Microsoft PowerPoint
      • Microsoft Outlook
      • Microsoft Excel
      • Microsoft Access
    3. 在第三頁上提供名稱和增益集的描述,再按 下一步]。

      附註名稱及增益集的描述會出現在 Office 應用程式中的 [COM 增益集] 對話方塊。

    4. 第 4 頁選取所有可用的選項,然後按一下 [下一步]。
    5. 按一下 [完成]。
  5. 將下列成員加入至 連接 類別:
    Dim WithEvents MyButton As CommandBarButton 
  6. 實作程式碼的 IDTExtensibility2連線] 類別中的所有成員,如下所示:
        Public Sub OnBeginShutdown(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnBeginShutdown
            On Error Resume Next
            ' Notify the user you are shutting down, and delete the button.
            MsgBox("Our custom Add-in is unloading.")
            MyButton.Delete()
            MyButton = Nothing
    
        End Sub
    
        Public Sub OnAddInsUpdate(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnAddInsUpdate
            '
        End Sub
    
        Public Sub OnStartupComplete(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnStartupComplete
    
            Dim oCommandBars As CommandBars
            Dim oStandardBar As CommandBar
    
            On Error Resume Next
            ' Set up a custom button on the "Standard" command bar.
            oCommandBars = applicationObject.CommandBars
            If oCommandBars Is Nothing Then
                ' Outlook has the CommandBars collection on the Explorer object.
                oCommandBars = applicationObject.ActiveExplorer.CommandBars
            End If
    
            oStandardBar = oCommandBars.Item("Standard")
            If oStandardBar Is Nothing Then
                ' Access names its main toolbar Database.
    
                oStandardBar = oCommandBars.Item("Database")
    
            End If
    
            ' In case the button was not deleted, use the exiting one.
            MyButton = oStandardBar.Controls.Item("My Custom Button")
            If MyButton Is Nothing Then
    
                MyButton = oStandardBar.Controls.Add(1)
                With MyButton
                    .Caption = "My Custom Button"
                    .Style = MsoButtonStyle.msoButtonCaption
    
                    ' The following items are optional, but recommended. 
                    ' The Tag property lets you quickly find the control 
                    ' and helps MSO keep track of it when more than
                    ' one application window is visible. The property is required
                    ' by some Office applications and should be provided.
    
                    .Tag = "My Custom Button"
    
                    ' The OnAction property is optional but recommended. 
                    ' It should be set to the ProgID of the add-in, so that if
                    ' the add-in is not loaded when a user clicks the button,
                    ' MSO loads the add-in automatically and then raises
                    ' the Click event for the add-in to handle. 
    
                    .OnAction = "!<MyCOMAddin.Connect>"
    
                    .Visible = True
                End With
            End If
    
            ' Display a simple message to show which application you started in.
            MsgBox("Started in " & applicationObject.Name & ".")
    
    
            oStandardBar = Nothing
            oCommandBars = Nothing
    
    
        End Sub
    
        Public Sub OnDisconnection(ByVal RemoveMode As Extensibility.ext_DisconnectMode, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnDisconnection
    
            On Error Resume Next
            If RemoveMode <> Extensibility.ext_DisconnectMode.ext_dm_HostShutdown Then _
               Call OnBeginShutdown(custom)
    
            applicationObject = Nothing
    
    
        End Sub
    
        Public Sub OnConnection(ByVal application As Object, ByVal connectMode As Extensibility.ext_ConnectMode, ByVal addInInst As Object, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnConnection
    
    
            MsgBox("On Connection In MyAddin")
            applicationObject = application
            addInInstance = addInInst
    
    
            ' If you aren't in startup, manually call OnStartupComplete.
            If (connectMode <> Extensibility.ext_ConnectMode.ext_cm_Startup) Then _
               Call OnStartupComplete(custom)
    
        End Sub
    
    
        Private Sub MyButton_Click(ByVal Ctrl As Microsoft.Office.Core.CommandBarButton, ByRef CancelDefault As Boolean) Handles MyButton.Click
            MsgBox("Our CommandBar button was pressed!")
        End Sub
    					
  7. 建置和測試 COM 增益集。要這麼做,請您執行下列步驟:
    1. 建置] 功能表上按一下 [建置 MyCOMAddin]。請注意建立 COM 增益集以 COM Interop 登錄.NET 類別。
    2. 啟動其中一個 Office 應用程式中的增益集 (比方說,Microsoft Word 或 Excel) 選擇作為主應用程式。
    3. 已啟動增益集之後引發 OnConnection 事件,而您會收到一個訊息方塊。當您解除訊息方塊將 OnStartupComplete] 引發,而您會收到第二個訊息方塊。關閉訊息方塊。
    4. 注意至 [標準] 工具列的 [增益集加入新的自訂按鈕與標題] [自訂] 按鈕"]。
    5. 按一下 [我的自訂按鈕。為按鈕的 Click 事件由增益集所處理,而且您收到訊息方塊。關閉訊息方塊。
    6. 請結束部份的 Office 應用程式。
    7. 當您結束應用程式 OnBeginShutDown 事件引發,您會收到一個訊息方塊。關閉訊息方塊,以結束示範。

?考

取得更多資訊有關撰寫 COM 增益集按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
190253資訊: VB6 設計工具無法運作在 VB5 中
如需有關 Microsoft Internet Explorer 開發 Web 為基礎的解決方案的詳細資訊,請造訪下列 Microsoft 網站:
http://msdn2.microsoft.com/en-us/ie/default.aspx

http://support.microsoft.com/iep
(保留所有的權限 c) Microsoft Corporation 2001。 由 Ranjit R 鍵 Sawant,Microsoft Corporation 的貢獻。

屬性

文章編號: 302896 - 上次校閱: 2006年12月25日 - 版次: 11.3
這篇文章中的資訊適用於:
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Office Outlook 2003
  • Microsoft Outlook 2002 Standard Edition
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft Office Word 2003
  • Microsoft Word 2002 Standard Edition
關鍵字:?
kbmt kbautomation kbhowtomaster KB302896 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:302896
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com