一 引言
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(可執行文件是Winwordexe)主題是對服務器有意義的信息單元對於Word文檔就是很好的主題許多服務器都有默認的主題System但無法知道服務器確切有那些主題除非查閱應用程序的相關技術文檔每次DDE客戶與服務程序之間的對話都是先由客戶啟動的所以在每次客戶啟動之前DDE服務器必須先投入運行下面是一個典型的DDE會話流程的事務組成
·客戶程序自動會話服務器程序響應
·客戶和服務器用下述方法交換數據
·服務器應客戶的請求向客戶發送數據
·客戶主動想服務器發送數據
·客戶要求服務器在數據修改時發送數據(熱數據連接)
·客戶要求服務器在數據修改後發送通知(溫數據連接)
·在客戶的要求下服務器執行一個命令
·由客戶或服務器中止會話
三 設計思路
首先在開發工具的選擇上選擇了提供有現成的DDE 系列組件的 Borland Delphi 既然以Microsoft Word作為要連接的服務器在與其建立連接之前要先設定好連接的服務與主題由於本例只要求通過本程序控制Word的一些操作動作如打開新文件關閉文件插入表格等等所以可以分別設定這兩項為Winword和System當設置好連接後就可以通過Delphi提供的DDEClientConv組件的OpenLink函數打開與這個服務的連接剩下的工作就是向Word服務器發送宏命令並通過組件向其發送執行宏的命令即可用該組件的函數ExecuteMacro來實現之
四程序的實現
(一) 加入DDE客戶端組件
新建一App工程WordDDE然後在Component Palette組件條的System屬性頁裡選擇DdeClientConv組件並把它拖放到窗體上修改其Name 屬性為DDEClient
(二) 添加同DDE服務進行交互的代碼
在工程上添加一個過程RunMacro用於打開同Word服務器的鏈接並通知服務器執行由Macro標識的宏命令讓Word按用戶的意圖完成響應的動作完成之後由客戶方斷開這次連接完成一次會話下面是上述過程的實現代碼
procedure TForm
RunMacro(Macro:pChar);
var pMacro:array[
] of Char;
begin
DDEClient
SetLink(
Winword
System
);{設置連接}
DDEClient
OpenLink;{按設置打開連接}
StrPCopy(pMacro
Macro);
if Not DDEClient
ExecuteMacro(pMacro
false) then{執行宏命令}
ShowMessage(
Unable to Execute Macro
);
DDEClient
CloseLink;{斷開連接}
end;
(三) 宏命令的執行
宏(Macro)是客戶程序要服務器完成的一些操作指令對與特定的Microsoft Word 而言無非是些打開文件插入分割符復制粘貼字符等一些字處理方面的宏命令這些宏命令完成的功能大多在Word的菜單下都能找到與之相匹配的菜單如關閉文件菜單完成的功能就可以通過宏[FileClose]來完成可以向窗口添加一個按鈕或是菜單然後在其處理函數中添加執行宏的代碼如下
procedure TForm
N
Click(Sender: TObject);
begin
RunMacro(
[FileNew]
);{讓Word創建一個新文件
宏[FileNew]由函數RunMacro通知Word}
end;
Word下有許多可供傳送執行的宏命令現將一些常用的宏羅列如下以備實際編程時選用
[FileNew] …… 創建新文件
[FileClose] …… 關閉文件
[FileSave] …… 保存文件
[FilePrint] …… 打印文件
[FileExit] …… 退出Word
[File] …… 打開最近打開的文件相應還有[File][File]等等
[EditCut] …… 剪切操作
[EditCopy] …… 復制操作
[EditPaste] …… 粘貼操作
[EditUndo] …… 恢復上一步
[EditRedo] …… 重做上一步
[EditClear] …… 清除操作
[EditSelectAll] …… 全選操作
[ViewNormal] …… 正常視圖
[ViewPage] …… 頁面視圖
[ViewOutLine] …… 大綱視圖
[InsertBreak] …… 插入分割符
[InsertIndex] …… 插入索引
[FormatNumber] …… 格式化項目符號和編號
[ToolsOptions] …… 工具的選項
[TableInsertTable] …… 插入表格
[TableInsertRow] …… 插入行
[TableDeleteRow] …… 刪除行
[TableSplit] …… 拆分表格
[TableSelectRow] …… 選擇行
[TableSelectColumn] …… 選擇列
[TableSelectTable] …… 選擇表格
[TableSort] …… 排序
[WindowNewWindow] …… 新建窗口
[Window] …… 最近打開的窗口響應還有[Window][Window]等等
[HelpIndex] …… 幫助的索引
[HelpAbout] …… 幫助的關於
小結
DDE技術向用戶提供了一種更加集成的工作環境最適合於不需要用戶參與的動態數據交換通過上述這個例子對DDE 的工作原理和編程思想有了一定的認識之後可以用類似的方法實現同其他程序如Microsoft Execl的DDE動態交互
From:http://tw.wingwit.com/Article/program/Delphi/201311/24789.html