在PB7.0中應用DDE技術一例
在使用PowerBuilder7.0開發用戶自己的應用程序時,需要用到一些在Windows操作系統環境中已有的文件格式或操作功能,如果一切從頭開始,不僅浪費大量的時間和精力,而且完成的功能也沒有Windows中已有的完善。如何利用Windows中已有的大量的應用程序和應用程序開發組件呢?Windows提供了兩種用於應用程序繼承的方法:DDE和OLE。
DDE(動態數據交換)在Windows操作系統是一種基於消息的協議,用來在不同的應用程序之間交換信息。在PowerBuilder中不僅提供了一套用來包裝Windows函數的DDE函數,而且提供了一種易於實現的接口。
下面以在PowerBuilder7.0下開發的應用程序中調用Microsoft Word編輯文本文件爲例說明如何調用Windows中的應用程序:
在PowerBuilder7.0中利用DDE的方法調用Windows程序相當於把Windows看成服務器,而把在PowerBuilder7.0下開發的應用程序看成客戶機,在客戶機中調用服務器程序可用Run函數。該函數的語法爲:
Run ( string {, windowstate } )
其中string是被調用的應用程序,其中還可以包含被調用的應用程序運行所需的參數;windowstate爲可選項,表示被調用的應用程序的啓動狀態,可取值有:Maximized!(最大化),Minimized!(最小化)和Normal!(正常)。
如果該函數執行成功則返回1,執行失敗則返回-1,如果賦給該函數的參數爲NULL,則返回NULL。
使用OpenChannel函數在兩個應用程序之間建立連接。該函數的語法爲:
OpenChannel ( applname, topicname {, windowhandle } )
其中applname表示被調用的應用程序名。topicname表示被調用的應用程序的主題名,如在Microsoft Word中可以取值爲已打開的文檔名。windowhandle爲可選項,表示被調用的應用程序的窗口句柄。
如果該函數執行成功則返回建立的通道的句柄,執行失敗則返回-1,如果通道句柄爲NULL,則返回-9。
下面是調用Microsoft Word的代碼,如果安裝了Microsoft Word,則運行winword.exe,否則運行notepad.exe:
int vi_rtn
string vs_prog,vs_path
// 從註冊表中獲取Microsoft Word的安裝路徑,保存在vs_path中
RegistryGet("HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/App Paths/Winword.exe","Path",RegString!,vs_path)
//判斷是否安裝了Microsoft Word
if vs_path<>"" then
// vs_prog保存winword的有關參數
//如果被調用的應用程序有運行參數,參數和應用程序名之間要有空格
vs_prog = vs_path+"winword.exe"
//啓動winword
vi_rtn = run(vs_prog,normal!)
if vi_rtn = -1 then
MessageBox("錯誤","無法運行程序!")
return
else
//建立通道
OpenChannel("winword","c:/my documents/example.doc")
end if
else
vs_prog = "c:/windows/notepad.exe"
vi_rtn = run(vs_prog,normal!)
if vi_rtn = -1 then
MessageBox("錯誤","無法運行程序!")
return
else
OpenChannel("notepad","c:/my documents/example.txt")
end if
end if
用類似的方法就能在用PowerBuilder7.0開發的用戶自己的應用程序中調用Windows系統中包含的大量應用程序,能夠大大提高用戶開發的效率,提升所開發的應用程序的性能。