Delphi下利用DDE實現(xiàn)同Word的交互

字號:

一、 引言
    Windows支持三種基本的IPC(進程間通信)機制:動態(tài)鏈接庫(DLL)中的共享數(shù)據(jù)段、Windows剪貼版(CliPBoard)和動態(tài)數(shù)據(jù)交換DDE(Dynamic Data Exchange)。許多的Windows應(yīng)用程序如Microsoft Word等都宣布支持DDE技術(shù),并在程序中嵌入了DDE消息處理函數(shù)。而此類應(yīng)用程序單在DDE技術(shù)上講大多是作為一個DDE服務(wù)器形式存在的,這就允許用戶通過自行編制的一些外圍軟件以DDE客戶的身份對其進行連接,并通過向DDE服務(wù)器程序發(fā)送一些特定的宏命令來完成對服務(wù)器程序的動態(tài)控制,本文就以常用的Microsoft Word為例,講述了在Delphi 編程環(huán)境下如何編制DDE客戶程序,使其動態(tài)控制Microsoft Word的一般方法。
    二、 DDE的工作原理
    DDE顧名思義,是提供對不同程序在運行期間實現(xiàn)對數(shù)據(jù)的動態(tài)交換的一種通用技術(shù)。Windows消息雖然是在不同程序窗口間傳送信息的手段,但一條消息只能包含兩個參數(shù)(wParam和lParam),不能傳送較多的信息。內(nèi)存塊是存放較多信息的重要手段,但不支持全局內(nèi)存句柄的共享。DDE正是建立在Windows內(nèi)部消息系統(tǒng)、全局原子和共享全局內(nèi)存基礎(chǔ)上的一種協(xié)議,用來協(xié)調(diào)Windows應(yīng)用程序之間的數(shù)據(jù)交換和命令調(diào)用。
    DDE協(xié)議使用三級命名:服務(wù)(service)、主題(topic)和數(shù)據(jù)項(item)來標(biāo)識DDE所傳遞的數(shù)據(jù)單元。服務(wù)使應(yīng)用程序具有了提供給其他程序的數(shù)據(jù)交換能力,一般服務(wù)就是應(yīng)用程序的文件名,如Word的服務(wù)就是是Winword(可執(zhí)行文件是Winword.exe);主題是對服務(wù)器有意義的信息單元,對于Word文檔就是很好的主題,許多服務(wù)器都有默認(rèn)的主題System,但無法知道服務(wù)器確切有那些主題,除非查閱應(yīng)用程序的相關(guān)技術(shù)文檔。每次DDE客戶與服務(wù)程序之間的對話都是先由客戶啟動的,所以在每次客戶啟動之前,DDE服務(wù)器必須先投入運行,下面是一個典型的DDE會話流程的事務(wù)組成:
    ·客戶程序自動會話,服務(wù)器程序響應(yīng)。
    ·客戶和服務(wù)器用下述方法交換數(shù)據(jù):
    ·服務(wù)器應(yīng)客戶的請求向客戶發(fā)送數(shù)據(jù);
    ·客戶主動想服務(wù)器發(fā)送數(shù)據(jù);
    ·客戶要求服務(wù)器在數(shù)據(jù)修改時發(fā)送數(shù)據(jù)(熱數(shù)據(jù)連接);
    ·客戶要求服務(wù)器在數(shù)據(jù)修改后發(fā)送通知(溫數(shù)據(jù)連接);
    ·在客戶的要求下,服務(wù)器執(zhí)行一個命令。
    ·由客戶或服務(wù)器中止會話。
    三、 設(shè)計思路
    首先,在開發(fā)工具的選擇上,選擇了提供有現(xiàn)成的DDE 系列組件的 Borland Delphi 5.0。既然以Microsoft Word作為要連接的服務(wù)器,在與其建立連接之前要先設(shè)定好連接的服務(wù)與主題,由于本例只要求通過本程序控制Word的一些操作動作,如打開新文件、關(guān)閉文件、插入表格等等,所以可以分別設(shè)定這兩項為:"Winword"和"System",當(dāng)設(shè)置好連接后就可以通過Delphi提供的DDEClientConv組件的OpenLink函數(shù)打開與這個服務(wù)的連接,剩下的工作就是向Word服務(wù)器發(fā)送宏命令,并通過組件向其發(fā)送執(zhí)行宏的命令即可,用該組件的函數(shù)ExecuteMacro來實現(xiàn)之。