日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

使用 Visual C# .NET 生成 Office COM 外接程序

發布時間:2023/12/19 C# 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用 Visual C# .NET 生成 Office COM 外接程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Microsoft Office XP 和 Microsoft Office 2003 都支持一種新的統一的設計結構,這種結構用于生成應用程序外接程序以增強和控制 Office 應用程序。這些外接程序叫做 COM 外接程序。本文逐步討論了 Office COM 外接程序,并介紹了如何使用 Microsoft Visual C# .NET 生成 Office COM 外接程序。?

IDTExensibility2 接口

COM 外接程序是一種進程內 COM 服務器或 ActiveX 動態鏈接庫 (DLL),它實現如 Microsoft 外接程序設計器類型庫 (Msaddndr.dll) 中所描述的?IDTExensibility2?接口。所有 COM 外接程序都從此接口繼承而來,而且都必須實現其五個方法中的每一個方法。?

OnConnection

每當連接 COM 外接程序時,都會激發?OnConnection?事件。外接程序可以在啟動時連接、由最終用戶連接或者通過自動化來連接。如果?OnConnection?成功地返回,就表明已加載了外接程序。如果返回錯誤消息,那么宿主應用程序就立即釋放其對該外接程序的引用,而且該對象將被銷毀。

OnConnection?使用下列四個參數:

  • Application?— 一個對宿主應用程序對象的引用。
  • ConnectMode?— 一個指定外接程序連接方式的常量。外接程序可以采取下列幾種方式連接:
    • ext_cm_AfterStartup?— 外接程序由最終用戶從?COM 外接程序?對話框啟動。
    • ext_cm_CommandLine?— 外接程序從命令行連接。注意,此方式不適用于生成 Office 應用程序的 COM 外接程序。
    • ext_cm_External?— 外接程序由外部應用程序通過自動化連接。請注意,此方式不適用于生成 Office 應用程序的 COM 外接程序。
    • ext_cm_Startup?— 外接程序由宿主在應用程序啟動時啟動。此行為由注冊表中的設置來控制。
  • AddInInst?— 一個對?COMAddIn?對象的引用,它引用宿主應用程序的?COMAddIns?集合中的此外接程序。
  • Custom?— 一個包含?Variant?類型值的數組,它可以存儲用戶定義的數據。

OnDisconnection

當 COM 外接程序斷開連接并且在它從內存中卸載之前,將激發?OnDisconnection?事件。外接程序應在此事件中執行所有資源清理操作,并還原對宿主應用程序所做的任何更改。

OnDisconnection?使用下列兩個參數:

  • RemoveMode?— 一個指定外接程序斷開連接的方式的常量。外接程序可以采用下列方式斷開連接:
    • ext_dm_HostShutdown?—外接程序在宿主應用程序關閉時斷開連接。
    • ext_dm_UserClosed?— 外接程序由最終用戶或自動化控制器斷開連接。
  • Custom?— 一個包含?Variant?類型值的數組,它可以存儲用戶定義的數據。

OnAddInsUpdate

當注冊的 COM 外接程序集發生變化時,將激發?OnAddInsUpdate?事件。換言之,每當安裝 COM 外接程序或者從宿主應用程序中刪除 COM 外接程序時,都會激發此事件。?

OnStartupComplete 和 OnBeginShutdown

當宿主應用程序在忙于向內存中加載自身或者從內存中卸載自身時應避免用戶交互,而?OnStartupComplete?OnBeginShutdown?方法都是在宿主應用程序已離開或正要進入這一狀態時被調用的。只有在啟動期間已連接了外接程序的情況下才調用?OnStartupComplete,只有宿主在關閉過程中要斷開與外接程序的連接的情況下才調用?OnBeginShutdown

由于在激發這些事件時宿主應用程序的用戶界面是完全活動的,因此它們可能是執行某些操作的唯一途徑,以其他途徑將無法從OnConnection??OnDisconnection?中執行這些操作。?

COM 外接程序注冊

除了正常的 COM 注冊外,COM 外接程序還需要向其運行所在的每一個 Office 應用程序注冊自身。為了向特定應用程序注冊其自身,外接程序應使用其 ProgID 作為項名稱在以下位置下創建一個子項:

HKEY_CURRENT_USER\Software\Microsoft\Office\OfficeApp\Addins\ProgID

外接程序可以在此項的位置為好記的顯示名稱和完整的說明提供值。此外,外接程序應使用一個名為

LoadBehavior

的 DWORD 值指定所希望的加載行為。此值確定宿主應用程序如何加載外接程序,而且它由下列值的組合組成:

  • 0 = Disconnect — 未加載。
  • 1 = Connected — 已加載。
  • 2 = Bootload — 在應用程序啟動時加載。
  • 8 = DemandLoad — 只在由用戶請求時加載。
  • 16 = ConnectFirstTime — 只加載一次(在下次啟動時)。

通常指定 0x03 (Connected | Bootload) 這一典型的值。?

實現了?IDTExtensibility2?的外接程序還應指定一個名為

CommandLineSafe

的 DWORD 值,以指出外接程序對于不支持用戶界面的操作是否安全。值為 0x00 表示 False,值為 0x01 則表示 True。?

如何使用 Visual C# .NET 生成 COM 外接程序

如上文所述,Office COM 外接程序是由 Office 應用程序通過 COM 運行時層激活的進程內 COM 服務器。因此,為了在 .NET 中開發 COM 外接程序,外接程序組件需要在 .NET 中實現,然后通過 COM interop 層向 COM 客戶端(即 Office 應用程序)公開。

要在 Visual C# .NET 中創建 COM 外接程序,請按照下列步驟操作:

  • 在 Visual C# .NET 中,創建一個類庫項目。
  • 添加一個對實現了?IDTExtensibility2?的類型庫的引用。此項的主 interop 程序集已經出現在?Extensibility?名稱下。
  • 添加一個對 Microsoft Office 對象庫的引用。此項的主 interop 程序集已經出現在?Office?名稱下。
  • 在實現了?IDTExtensibility2?的類庫中創建一個公共類。
  • 生成該類庫之后,將該庫向 COM interop 進行注冊。為此,需要為此類庫生成一個使用強名稱的程序集,然后將它注冊到 COM interop。可以使用 Regasm.exe 來向 COM interop 注冊 .NET 組件。
  • 創建注冊表條目以使 Office 應用程序可以識別并加載外接程序。
  • 您可以選擇完成所有這些步驟,或可以創建類型為共享的外接程序?的 .NET 項目。這將啟動“擴展性向導”,該向導可幫助您在 .NET 中創建 COM 外接程序。

    “擴展性向導”將創建一個 Visual C# .NET 類庫項目,同時創建一個實現了?IDTExtensibility2?接口的?Connect?類。它還會生成實現IDTExtensibility?的空成員的主干代碼。此項目具有對 Extensibility 和 Office 程序集的引用。該項目的生成設置中已選中了注冊 COM interop。將生成程序集密鑰 (.snk) 文件,并在 Assemblyinfo.vb 文件的?AssemblyKeyfile?屬性中進行引用。

    除類庫項目外,該向導還將生成一個安裝項目,該項目可用于在其他計算機上部署 COM 外接程序。在需要時可以刪除此項目。

    分步示例

  • 在 Microsoft Visual Studio .NET 的文件菜單上,單擊新建,然后單擊項目
  • 新建項目對話框中,展開項目類型下的其他項目,選擇擴展性項目,然后選擇共享的外接程序模板。
  • 鍵入?MyCOMAddin?作為該外接程序的名稱,然后單擊確定
  • “擴展性向導”出現后,請按照下列步驟操作:
  • 在第 1 頁,選擇使用 Visual C# 創建外接程序,然后單擊下一步
  • 在第 2 頁,選擇下面的宿主應用程序,然后單擊下一步
    • Microsoft Word
    • Microsoft PowerPoint
    • Microsoft Outlook
    • Microsoft Excel
    • Microsoft Access
  • 在第 3 頁上,輸入該外接程序的名稱和描述,然后單擊下一步

    注意:該外接程序的名稱和描述出現在 Office 應用程序的?COM 加載項對話框中。

  • 在第 4 頁,選擇所有可用的選項,然后單擊下一步
  • 單擊完成
  • 項目菜單上,單擊添加引用。單擊組件列表中的?System.Windows.Forms.DLL,單擊選擇,然后單擊確定
  • 將下列代碼添加到?Connect?類中的名稱空間列表中: using System.Reflection;
  • 將下列成員添加到?Connect?類中: private CommandBarButton MyButton;
  • ?Connect?類中實現?IDTExtensibility2?的成員的代碼,如下所示: public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom) {applicationObject = application;addInInstance = addInInst;if(connectMode != Extensibility.ext_ConnectMode.ext_cm_Startup){OnStartupComplete(ref custom);}}public void OnDisconnection(Extensibility.ext_DisconnectMode disconnectMode, ref System.Array custom) {if(disconnectMode != Extensibility.ext_DisconnectMode.ext_dm_HostShutdown){OnBeginShutdown(ref custom);}applicationObject = null; }public void OnAddInsUpdate(ref System.Array custom) { }public void OnStartupComplete(ref System.Array custom) {CommandBars oCommandBars;CommandBar oStandardBar;try{oCommandBars = (CommandBars)applicationObject.GetType().InvokeMember("CommandBars", BindingFlags.GetProperty , null, applicationObject ,null);}catch(Exception){// Outlook has the CommandBars collection on the Explorer object.object oActiveExplorer;oActiveExplorer= applicationObject.GetType().InvokeMember("ActiveExplorer",BindingFlags.GetProperty,null,applicationObject,null);oCommandBars= (CommandBars)oActiveExplorer.GetType().InvokeMember("CommandBars",BindingFlags.GetProperty,null,oActiveExplorer,null);}// Set up a custom button on the "Standard" commandbar.try{oStandardBar = oCommandBars["Standard"]; }catch(Exception){// Access names its main toolbar Database.oStandardBar = oCommandBars["Database"]; }// In case the button was not deleted, use the exiting one.try{MyButton = (CommandBarButton)oStandardBar.Controls["My Custom Button"];}catch(Exception){object omissing = System.Reflection.Missing.Value ;MyButton = (CommandBarButton) oStandardBar.Controls.Add(1, omissing , omissing , omissing , omissing);MyButton.Caption = "My Custom Button";MyButton.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.MyButton.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 presses the button,//MSO loads the add-in automatically and then raises//the Click event for the add-in to handle. MyButton.OnAction = "!<MyCOMAddin.Connect>";MyButton.Visible = true;MyButton.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(this.MyButton_Click);object oName = applicationObject.GetType().InvokeMember("Name",BindingFlags.GetProperty,null,applicationObject,null);// Display a simple message to show which application you started in.System.Windows.Forms.MessageBox.Show("This Addin is loaded by " + oName.ToString() , "MyCOMAddin");oStandardBar = null;oCommandBars = null; }public void OnBeginShutdown(ref System.Array custom) {object omissing = System.Reflection.Missing.Value ;System.Windows.Forms.MessageBox.Show("MyCOMAddin Add-in is unloading.");MyButton.Delete(omissing);MyButton = null; }private void MyButton_Click(CommandBarButton cmdBarbutton,ref bool cancel) {System.Windows.Forms.MessageBox.Show("MyButton was Clicked","MyCOMAddin"); }
  • 生成并測試該 COM 外接程序。為此,請按照下列步驟操作:
  • 生成菜單上,單擊生成解決方案。請注意,生成 COM 外接程序的過程中實際上就向 COM interop 注冊了 .NET 類。
  • 啟動一個您選作外接程序的宿主應用程序的 Office 應用程序(例如,Microsoft Word 或 Microsoft Excel)。
  • 外接程序啟動之后,將激發其?OnStartupComplete?事件,您會收到一個消息框。請關閉該消息框。請注意,外接程序向標準工具欄中添加了一個新的標題為“My Custom Button”(我的自定義按鈕)的自定義按鈕。
  • 單擊?My Custom Button(我的自定義按鈕)。該按鈕的?Click?事件將由外接程序來處理,而且您會收到一個消息框。請關閉該消息框。
  • 退出該 Office 應用程序。
  • 退出該應用程序時,將激發?OnBeginShutDown?事件,您會收到一個消息框。關閉該消息框以結束演示。
  • ?

    ?

    在應用程序的開發中,我們可能需要開發Office的插件。在VS2003中,我們很容易地開發一個外接程序,利用COM Add-in,在Office系統軟件上添加菜單或者工具欄按鈕。

    ?

    ?

    ?

    ?

    ?

    ?http://dotnet.chinaitlab.com/DotNetFramework/527049.html

    完整程序參考:

    ?

    如果想在程序中,更好地控制OutLook,比如說獲取所有郵件,所有聯系人、發郵件、控制郵件接收、郵件統計。把我們的應用軟件和OutLook集成等等,可以參考:

    An Introduction to Programming Outlook 2003 Using C#

    ?

    What's New in Microsoft Office Outlook 2003 for Developers?

    ?

    http://techedbloggers.net/Topics/Office/Outlook.category

    轉載于:https://www.cnblogs.com/ayforver/p/3291186.html

    總結

    以上是生活随笔為你收集整理的使用 Visual C# .NET 生成 Office COM 外接程序的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。