Word的COM載入項開發指南
所謂程式外掛(add-in),是指根據主程式的SDK製作出的程式模組。這個模組必須做到以下兩點:實現主程式SDK定義的某種介面(不一定是COM介面);必須以某種形式註冊,如寫入特定登錄檔資訊或者存放在主程式規定的特定路徑下。實現上述兩點後,主程式執行時,就會根據註冊方式找到外掛模組,並根據實現的介面載入它。這樣,程式外掛就插入到主程式的執行程式中,並可以實現自己的功能了。
之前介紹的基於Word客戶端的電子印章系統,就是典型的程式外掛,它被載入到Word的程式,在Word的編輯環境中加入了自己的選單,並實現了針對Word文件的簽章、驗證等功能。
今天介紹一下它的實現過程,希望對大家以後做類似功能的開發有所幫助。
實現介面
因為Word程式外掛是COM控制元件,所以在Word裡把這種外掛叫COM載入項。它需要實現型別庫Microsoft Add-in Designer的介面IDTExtensibility2,這個型別庫對應的檔案是MSADDNDR.DLL,它預設的位置在:程式安裝路徑\Common Files\DESIGNER目錄裡,安裝了微軟的Office就會有此檔案(其實IDTExtensibility2介面最開始是用於Visual Studio IDE工具的擴充開發的)。
首先需引用此型別庫。如果使用VC開發,可以通過實現介面嚮導引用,如下圖。
注意,通過嚮導新增後,在stdafx.h裡的輸入語句是開發機器上MSADDNDR.DLL的絕對路徑,比如:
#import “C:\Program Files (x86)\Common Files\DESIGNER\MSADDNDR.DLL” raw_interfaces_only, raw_native_types, no_namespace, named_guids, auto_search
因此,需要將#import 的內容改為使用型別庫ID,如下:
#import “libid:AC0714F2-3D04-11D1-AE7D-00A0C90F26F4” raw_interfaces_only, raw_native_types, no_namespace, named_guids, auto_search
型別庫ID可以通過在IDTExtensibility2介面上點選右鍵去到其定義MSADDNDR.tlh裡查詢。
當然,你也可以手工地在stdafx.h里加入上述語句,並在外掛類的宣告裡加上如下實現介面宣告:
public IDispatchImpl<_IDTExtensibility2, &__uuidof(_IDTExtensibility2), &LIBID_AddInDesignerObjects, /* wMajor = */ 1>.
如果是使用VB開發,直接新增引用即可。
接下來就是實現介面了, IDTExtensibility2定義了五個介面函式用於外掛與主程式的通訊,其說明如下表:
上述介面函式中,最重要的就是OnConnection和OnStartupComplete.在OnConnection的實現程式碼中,外掛可以通過Object引數獲得主程式物件,由此就可以訪問主程式並呼叫其各種屬性、方法。在OnStartupComplete中,因為此時已載入完畢,外掛可以實現各種預定的功能了。其他介面可用於一些變數的初始化和記憶體釋放工作,如果確實無事可做,直接返回即可。因此,我們可以在實現OnConnection介面的方法裡獲得Word程式物件,在實現OnStartupComplete介面的方法裡訪問、操作這個物件,從而實現外掛的功能。至於Word程式物件有哪些屬性方法等介面可以呼叫,就屬於Word二次開發的內容了,本文不再展開。
註冊外掛
Word採用記錄登錄檔方式註冊外掛,登錄檔位置如下:HKEY_CURRENT_USER\Software\Microsoft\Office\Word\AddIns或HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Word\Addins.
如果外掛是對當前使用者有效就用前者,如果對所有使用者生效就用後者。如果是64位系統中安裝的32位Word,那登錄檔路徑相應改為HKEY_CURRENT_USER\Software\Wow6432Node \Microsoft\Office\Word\AddIns或HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node \Microsoft\Office\Word\Addins.
在上述登錄檔位置下,每一個外掛為一個子項,外掛類的ProgID為子項的名稱,如下圖:
其中,“WordClient7.WordAddin”是外掛的控制元件類名,常用的有以下幾個鍵值
Description:外掛的簡短描述。
FriendlyName:是在“COM載入項”對話方塊中顯示的外掛名稱。
LoadBehavior:外掛的載入方式,它由以下幾個值組合而成: 0表示不載入、1表示載入、2表示程式啟動時採取動作、8表示需要時採取動作、16表示首次連線時採取動作。所以一般設定為3,表示Word啟動時載入。
CommandLineSafe:標識外掛是不是命令列安全的,一般設定成0.
按照上述方式設定登錄檔值後,外掛就可以整合在Word中使用了。我們可以在Word的COM載入項視窗中管理這些外掛,如下圖。
Excel、WPS也採用類似的外掛註冊方式。其中,高版本的WPS文字甚至可以直接使用Word的外掛註冊資訊,作為其自身的外掛。大家可以自行研究。
相關文章
- Word 刪除載入項
- Three.js開發指南(10):載入和使用紋理JS
- Go Web開發入坑指南GoWeb
- Java 開發者的 Python 快速入門指南JavaPython
- Babel 外掛開發入門指南Babel
- Babel外掛開發入門指南Babel
- 【Android開發入門教程】三.Activity入門指南!Android
- Sentry 開發者貢獻指南 - SDK 開發(事件負載)事件負載
- Flutter入坑指南:開發環境搭建Flutter開發環境
- 獨立遊戲開發入門指南遊戲開發
- Flutter 例項 - 載入更多的ListViewFlutterView
- Taro原理分析、遷移指南及開發注意事項
- 給 Web 開發人員的以太坊入坑指南Web
- 給Web開發人員的以太坊入坑指南Web
- 使用c# 開發 php的com元件C#PHP元件
- longing載入中例項
- 開源依賴項管理指南
- Three.js開發指南(8):建立、載入高階網格和幾何體JS
- 優化 WebView 的載入速度例項優化WebView
- springboot怎麼載入yml中的配置項Spring Boot
- 用友開發者中心全新升級,YonBuilder移動開發入門指南UI移動開發
- React 16 載入效能優化指南React優化
- gitbook 入門教程之使用 gitbook.com 線上開發電子書Git
- 對標小程式 ? "快應用"開發入門指南
- PyCharm入門級使用指南,Python開發必備!PyCharmPython
- 《Excelize 開發者指南》入駐 GoCN 小程式專欄ExcelizeGo
- GCC開發指南GC
- canvas載入效果程式碼例項Canvas
- 平庸開發者的生存指南
- aspnetcore外掛開發dll熱載入NetCore
- c#入門-下載開發工具C#
- Flutter 開發從 0 到 1(四)ListView 下拉載入和載入更多FlutterView
- Three.js開發指南隨書原始碼下載地址JS原始碼
- Vue.js新手入門指南[轉載]Vue.js
- Qt大型工程開發技術選型Part3:Qt呼叫C#編寫的COM元件例項QTC#元件
- Nuxt Kit 的使用指南:從載入到構建UX
- Vue入門指南-05 Vue例項的生命週期(快速上手vue)Vue
- Vue入門指南-01建立vue例項 (快速上手vue)Vue