一、 引言
Windows支援三種基本的IPC(處理序間通訊)機制:動態連結程式庫(DLL)中的共用資料區段、Windows剪貼版(Clipboard)和動態資料交換DDE(Dynamic Data Exchange)。許多著名的Windows應用程式如Microsoft Word等都宣布支援DDE技術,並在程式中嵌入了DDE訊息處理函數。而此類應用程式單在DDE技術上講大多是作為一個DDE伺服器形式存在的,這就允許使用者通過自行編製的一些外圍軟體以DDE客戶的身份對其進行串連,並通過向DDE伺服器程式發送一些特定的宏命令來完成對伺服器程式的動態控制,本文就以常用的Microsoft Word為例,講述了在Delphi 編程環境下如何編製DDE客戶程式,使其動態控制Microsoft Word的一般方法。
二、 DDE的工作原理
DDE顧名思義,是提供對不同程式在運行期間實現對資料的動態交換的一種通用技術。Windows訊息雖然是在不同程式視窗間傳送資訊的最佳手段,但一條訊息只能包含兩個參數(wParam和lParam),不能傳送較多的資訊。記憶體塊是存放較多資訊的重要手段,但不支援全域記憶體控制代碼的共用。DDE正是建立在Windows內部訊息系統、全域原子和共用全域記憶體基礎上的一種協議,用來協調Windows應用程式之間的資料交換和命令調用。
DDE協議使用三級命名:服務(service)、主題(topic)和資料項目(item)來標識DDE所傳遞的資料單元。服務使應用程式具有了提供給其他程式的資料交換能力,一般服務就是應用程式的檔案名稱,如Word的服務就是是Winword(可執行檔是Winword.exe);主題是對伺服器有意義的資訊單元,對於Word文檔就是很好的主題,許多伺服器都有預設的主題System,但無法知道伺服器確切有那些主題,除非查閱應用程式的相關技術文檔。每次DDE客戶與服務程式之間的對話都是先由客戶啟動的,所以在每次客戶啟動之前,DDE伺服器必須先投入運行,下面是一個典型的DDE會話流程的事務組成:
·客戶程式自動會話,伺服器程式響應。
·客戶和伺服器用下述方法交換資料:
·伺服器應客戶的請求向客戶發送資料;
·客戶主動想伺服器發送資料;
·客戶要求伺服器在資料修改時發送資料(熱資料連線);
·客戶要求伺服器在資料修改後發送通知(溫資料連線);
·在客戶的要求下,伺服器執行一個命令。
·由客戶或伺服器中止會話。
三、 設計思路
首先,在開發工具的選擇上,選擇了提供有現成的DDE 系列組件的 Borland Delphi 5.0。既然以Microsoft Word作為要已連線的服務器,在與其建立串連之前要先設定好已連線的服務與主題,由於本例只要求通過本程式控制Word的一些操作動作,如開啟新檔案、關閉檔案、插入表格等等,所以可以分別設定這兩項為:"Winword"和"System",當設定好串連後就可以通過Delphi提供的DDEClientConv組件的OpenLink函數開啟與這個服務的串連,剩下的工作就是向Word伺服器發送宏命令,並通過組件向其發送執行宏的命令即可,用該組件的函數ExecuteMacro來實現之。