這里當然指一個程序讀取另一個程序中數據窗口的數據。設想的方法有多種,簡單的方法是向數據窗口傳遞消息啦!先看看這個:
how to manipulate datawindow without using datawindow functions.
// i test only on powerbuilder 6.5 build 444long ll_dw_handlell_dw_handle = handle(dw_1)
functionpower scriptretrievepost(ll_dw_handle, 1306, 0, 0)post(ll_dw_handle, 1320, 0, 0)scrollnextpagepost(ll_dw_handle, 1318, 0, 0)scrollpriorpagepost(ll_dw_handle, 1319, 0, 0) scrolltofirstpagepost(ll_dw_handle, 1315, 0, 1) // 1 = first row?scrolltolastpagepost(ll_dw_handle, 1315, 0, 99999999) // 99999999 = last page ? pb6 programmer don't know how to get the last page :)sort dialogpost(ll_dw_handle, 1309, 0, 0) filter dialogpost(ll_dw_handle, 1311, 0, 0) deleterowpost(ll_dw_handle, 1357, 0, 0) post(ll_dw_handle, 1307, 0, 0) append rowpost(ll_dw_handle, 1357, 0, 0)post(ll_dw_handle, 1312, 0, 0)post(ll_dw_handle, 1315, 0, dw_1.rowcount() + 1)post(ll_dw_handle, 1325, 0, 0)insertrowpost(ll_dw_handle, 1357, 0, 0)post(ll_dw_handle, 1313, 0, 0)post(ll_dw_handle, 1312, 0, dw_1.getrow())post(ll_dw_handle, 1315, 0, dw_1.getrow())post(ll_dw_handle, 1325, 0, 0)updatepost(ll_dw_handle, 1357, 0, 0)post(ll_dw_handle, 1338, 0, 0)post(ll_dw_handle, 1304, 0, 0) saveas dialog post(ll_dw_handle, 1338, 0, 0)post(ll_dw_handle, 1305, 0, 0) printpost(ll_dw_handle, 1303, 0, 0)retrieve (yield)post(ll_dw_handle, 1306, 1, 0)post(ll_dw_handle, 1320, 0, 0)cancelpost(ll_dw_handle, 1320, 0, 0)
轉載自:http://www.mycgiserver.com/~unoksoftgroup/undocumented/undocumented_powerbuilder.html
通過測試發現使用post(ll_dw_handle, 1305, 0, 0) ,可以使數據窗口彈出saveas的對話框,經過進一步的試驗,發現wparam和lparam參數的含義分別是 :saveas type和 savefilename字符串的地址,所以我們就可以使用發送消息的方式使數據窗口內容保存為文本文件,然后讀取文件就可以獲取數據了。
我在pb程序中的測試代碼:
function integer sndmsg(long hwnd, long umsg, long wp, & ref string filename) library "user32.dll" alias for "sendmessagea"
long ll_dw_handlell_dw_handle = handle(dw_1)string ss="c:/111.txt"sndmsg(ll_dw_handle, 1305, 2, s)
如果要編寫一個數據窗口外掛程序,只要得到數據窗口的句柄就可以了,我就點到這里為止了。