使用 Visual C# .NET 生成 Office COM 外接程序
Microsoft Office XP 和 Microsoft Office 2003 都支持一種新的統(tǒng)一的設(shè)計(jì)結(jié)構(gòu),這種結(jié)構(gòu)用于生成應(yīng)用程序外接程序以增強(qiáng)和控制 Office 應(yīng)用程序。這些外接程序叫做 COM 外接程序。本文逐步討論了 Office COM 外接程序,并介紹了如何使用 Microsoft Visual C# .NET 生成 Office COM 外接程序。?
IDTExensibility2 接口
COM 外接程序是一種進(jìn)程內(nèi) COM 服務(wù)器或 ActiveX 動(dòng)態(tài)鏈接庫 (DLL),它實(shí)現(xiàn)如 Microsoft 外接程序設(shè)計(jì)器類型庫 (Msaddndr.dll) 中所描述的?IDTExensibility2?接口。所有 COM 外接程序都從此接口繼承而來,而且都必須實(shí)現(xiàn)其五個(gè)方法中的每一個(gè)方法。?
OnConnection
每當(dāng)連接 COM 外接程序時(shí),都會(huì)激發(fā)?OnConnection?事件。外接程序可以在啟動(dòng)時(shí)連接、由最終用戶連接或者通過自動(dòng)化來連接。如果?OnConnection?成功地返回,就表明已加載了外接程序。如果返回錯(cuò)誤消息,那么宿主應(yīng)用程序就立即釋放其對(duì)該外接程序的引用,而且該對(duì)象將被銷毀。
OnConnection?使用下列四個(gè)參數(shù):
- Application?— 一個(gè)對(duì)宿主應(yīng)用程序?qū)ο蟮囊谩?/li>
- ConnectMode?— 一個(gè)指定外接程序連接方式的常量。外接程序可以采取下列幾種方式連接:
- ext_cm_AfterStartup?— 外接程序由最終用戶從?COM 外接程序?對(duì)話框啟動(dòng)。
- ext_cm_CommandLine?— 外接程序從命令行連接。注意,此方式不適用于生成 Office 應(yīng)用程序的 COM 外接程序。
- ext_cm_External?— 外接程序由外部應(yīng)用程序通過自動(dòng)化連接。請(qǐng)注意,此方式不適用于生成 Office 應(yīng)用程序的 COM 外接程序。
- ext_cm_Startup?— 外接程序由宿主在應(yīng)用程序啟動(dòng)時(shí)啟動(dòng)。此行為由注冊(cè)表中的設(shè)置來控制。
- AddInInst?— 一個(gè)對(duì)?COMAddIn?對(duì)象的引用,它引用宿主應(yīng)用程序的?COMAddIns?集合中的此外接程序。
- Custom?— 一個(gè)包含?Variant?類型值的數(shù)組,它可以存儲(chǔ)用戶定義的數(shù)據(jù)。
OnDisconnection
當(dāng) COM 外接程序斷開連接并且在它從內(nèi)存中卸載之前,將激發(fā)?OnDisconnection?事件。外接程序應(yīng)在此事件中執(zhí)行所有資源清理操作,并還原對(duì)宿主應(yīng)用程序所做的任何更改。
OnDisconnection?使用下列兩個(gè)參數(shù):
- RemoveMode?— 一個(gè)指定外接程序斷開連接的方式的常量。外接程序可以采用下列方式斷開連接:
- ext_dm_HostShutdown?—外接程序在宿主應(yīng)用程序關(guān)閉時(shí)斷開連接。
- ext_dm_UserClosed?— 外接程序由最終用戶或自動(dòng)化控制器斷開連接。
- Custom?— 一個(gè)包含?Variant?類型值的數(shù)組,它可以存儲(chǔ)用戶定義的數(shù)據(jù)。
OnAddInsUpdate
當(dāng)注冊(cè)的 COM 外接程序集發(fā)生變化時(shí),將激發(fā)?OnAddInsUpdate?事件。換言之,每當(dāng)安裝 COM 外接程序或者從宿主應(yīng)用程序中刪除 COM 外接程序時(shí),都會(huì)激發(fā)此事件。?
OnStartupComplete 和 OnBeginShutdown
當(dāng)宿主應(yīng)用程序在忙于向內(nèi)存中加載自身或者從內(nèi)存中卸載自身時(shí)應(yīng)避免用戶交互,而?OnStartupComplete?和OnBeginShutdown?方法都是在宿主應(yīng)用程序已離開或正要進(jìn)入這一狀態(tài)時(shí)被調(diào)用的。只有在啟動(dòng)期間已連接了外接程序的情況下才調(diào)用?OnStartupComplete,只有宿主在關(guān)閉過程中要斷開與外接程序的連接的情況下才調(diào)用?OnBeginShutdown。
由于在激發(fā)這些事件時(shí)宿主應(yīng)用程序的用戶界面是完全活動(dòng)的,因此它們可能是執(zhí)行某些操作的唯一途徑,以其他途徑將無法從OnConnection?和?OnDisconnection?中執(zhí)行這些操作。?
COM 外接程序注冊(cè)
除了正常的 COM 注冊(cè)外,COM 外接程序還需要向其運(yùn)行所在的每一個(gè) Office 應(yīng)用程序注冊(cè)自身。為了向特定應(yīng)用程序注冊(cè)其自身,外接程序應(yīng)使用其 ProgID 作為項(xiàng)名稱在以下位置下創(chuàng)建一個(gè)子項(xiàng):
HKEY_CURRENT_USER\Software\Microsoft\Office\OfficeApp\Addins\ProgID外接程序可以在此項(xiàng)的位置為好記的顯示名稱和完整的說明提供值。此外,外接程序應(yīng)使用一個(gè)名為
LoadBehavior的 DWORD 值指定所希望的加載行為。此值確定宿主應(yīng)用程序如何加載外接程序,而且它由下列值的組合組成:
- 0 = Disconnect — 未加載。
- 1 = Connected — 已加載。
- 2 = Bootload — 在應(yīng)用程序啟動(dòng)時(shí)加載。
- 8 = DemandLoad — 只在由用戶請(qǐng)求時(shí)加載。
- 16 = ConnectFirstTime — 只加載一次(在下次啟動(dòng)時(shí))。
通常指定 0x03 (Connected | Bootload) 這一典型的值。?
實(shí)現(xiàn)了?IDTExtensibility2?的外接程序還應(yīng)指定一個(gè)名為
的 DWORD 值,以指出外接程序?qū)τ诓恢С钟脩艚缑娴牟僮魇欠癜踩V禐?0x00 表示 False,值為 0x01 則表示 True。?
如何使用 Visual C# .NET 生成 COM 外接程序
如上文所述,Office COM 外接程序是由 Office 應(yīng)用程序通過 COM 運(yùn)行時(shí)層激活的進(jìn)程內(nèi) COM 服務(wù)器。因此,為了在 .NET 中開發(fā) COM 外接程序,外接程序組件需要在 .NET 中實(shí)現(xiàn),然后通過 COM interop 層向 COM 客戶端(即 Office 應(yīng)用程序)公開。
要在 Visual C# .NET 中創(chuàng)建 COM 外接程序,請(qǐng)按照下列步驟操作:
您可以選擇完成所有這些步驟,或可以創(chuàng)建類型為共享的外接程序?的 .NET 項(xiàng)目。這將啟動(dòng)“擴(kuò)展性向?qū)А?#xff0c;該向?qū)Э蓭椭?.NET 中創(chuàng)建 COM 外接程序。
“擴(kuò)展性向?qū)А睂?chuàng)建一個(gè) Visual C# .NET 類庫項(xiàng)目,同時(shí)創(chuàng)建一個(gè)實(shí)現(xiàn)了?IDTExtensibility2?接口的?Connect?類。它還會(huì)生成實(shí)現(xiàn)IDTExtensibility?的空成員的主干代碼。此項(xiàng)目具有對(duì) Extensibility 和 Office 程序集的引用。該項(xiàng)目的生成設(shè)置中已選中了注冊(cè) COM interop。將生成程序集密鑰 (.snk) 文件,并在 Assemblyinfo.vb 文件的?AssemblyKeyfile?屬性中進(jìn)行引用。
除類庫項(xiàng)目外,該向?qū)н€將生成一個(gè)安裝項(xiàng)目,該項(xiàng)目可用于在其他計(jì)算機(jī)上部署 COM 外接程序。在需要時(shí)可以刪除此項(xiàng)目。
分步示例
- Microsoft Word
- Microsoft PowerPoint
- Microsoft Outlook
- Microsoft Excel
- Microsoft Access
注意:該外接程序的名稱和描述出現(xiàn)在 Office 應(yīng)用程序的?COM 加載項(xiàng)對(duì)話框中。
?
?
在應(yīng)用程序的開發(fā)中,我們可能需要開發(fā)Office的插件。在VS2003中,我們很容易地開發(fā)一個(gè)外接程序,利用COM Add-in,在Office系統(tǒng)軟件上添加菜單或者工具欄按鈕。
?
?
?
?
?
?http://dotnet.chinaitlab.com/DotNetFramework/527049.html
完整程序參考:
?
如果想在程序中,更好地控制OutLook,比如說獲取所有郵件,所有聯(lián)系人、發(fā)郵件、控制郵件接收、郵件統(tǒng)計(jì)。把我們的應(yīng)用軟件和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
轉(zhuǎn)載于:https://www.cnblogs.com/ayforver/p/3291186.html
總結(jié)
以上是生活随笔為你收集整理的使用 Visual C# .NET 生成 Office COM 外接程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么在pdf里面打马赛克(pdf内容怎么
- 下一篇: JavaScript怎么上传图片