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 刪除載入項
- MaxCompute Mars開發指南
- MaxCompute 圖計算開發指南
- Three.js開發指南(10):載入和使用紋理JS
- 【.NET開發之美】使用ComponentOne提高.NET DataMap中的載入速度
- Go Web開發入坑指南GoWeb
- 獨立遊戲開發入門指南遊戲開發
- Babel外掛開發入門指南Babel
- Babel 外掛開發入門指南Babel
- Android Unity Plugin 開發指南(轉載)AndroidUnityPlugin
- COM入門(轉載)
- Flutter入坑指南:開發環境搭建Flutter開發環境
- 利用ext的combobox載入資料庫資料程式碼例項資料庫
- PHP 之 Composer 新手入門指南PHP
- OpenAI Chat completion API 入門指南OpenAIAPI
- 【Android開發入門教程】三.Activity入門指南!Android
- 給Web開發人員的以太坊入坑指南Web
- 給 Web 開發人員的以太坊入坑指南Web
- Restlet - 使用Restlet自身元件Application/Component的開發例項REST元件APP
- Composer 自動載入
- Three.js開發指南(8):建立、載入高階網格和幾何體JS
- Taro原理分析、遷移指南及開發注意事項
- C#開發PACS醫學影像處理系統(六):載入Dicom影像C#
- Flutter 例項 - 載入更多的ListViewFlutterView
- .net頁面載入顯示word檔案
- 讀懂CommonJS的模組載入JS
- 開發指南
- tcom 操作word表格
- DevExpress WPF入門指南:載入動畫的應用devExpress動畫
- Web Components 入門例項教程Web
- 模組載入工具製造指南
- composer自動載入配置
- CommonJs載入規範JS
- ESModule中載入commjsJS
- 《Node.js開發指南》——Node.js入門Node.js
- 開源依賴項管理指南
- 用Delphi進行word開發
- Sentry 開發者貢獻指南 - SDK 開發(事件負載)事件負載