我用sendmessage向一個pddw(類名:pbdw90)類似編輯框的視窗發送訊息失敗,我該怎么辦啊?
我是用易語言向一個pb寫的程式發訊息
uj5u.com熱心網友回復:
你要發送什么資訊?
uj5u.com熱心網友回復:
例子如下這里當然指一個程式讀取另一個程式中資料視窗的資料。設想的方法有多種,簡單的方法是向資料視窗傳遞訊息啦!先看看這個:
How to manipulate Datawindow without using datawindow functions.
// I test only on PowerBuilder 6.5 build 444
long ll_dw_handle
ll_dw_handle = handle(dw_1)
Function
Power Script
Retrieve
Post(ll_dw_handle, 1306, 0, 0)
Post(ll_dw_handle, 1320, 0, 0)
ScrollNextPage
Post(ll_dw_handle, 1318, 0, 0)
ScrollPriorPage
Post(ll_dw_handle, 1319, 0, 0)
ScrollToFirstPage
Post(ll_dw_handle, 1315, 0, 1) // 1 = first row?
ScrollToLastPage
Post(ll_dw_handle, 1315, 0, 99999999) // 99999999 = last page ? pb6 programmer don't know how to get the last page :)
Sort Dialog
Post(ll_dw_handle, 1309, 0, 0)
Filter Dialog
Post(ll_dw_handle, 1311, 0, 0)
DeleteRow
Post(ll_dw_handle, 1357, 0, 0)
Post(ll_dw_handle, 1307, 0, 0)
Append Row
Post(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)
InsertRow
Post(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)
Update
Post(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)
Post(ll_dw_handle, 1303, 0, 0)
Retrieve (yield)
Post(ll_dw_handle, 1306, 1, 0)
Post(ll_dw_handle, 1320, 0, 0)
Cancel
Post(ll_dw_handle, 1320, 0, 0)
通過測驗發現使用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_handle
ll_dw_handle = handle(dw_1)
string s
s="c:\111.txt"
SndMsg(ll_dw_handle, 1305, 2, s)
如果要撰寫一個資料視窗外掛程式,只要得到資料視窗的句柄就可以了,我就點到這里為止了。
uj5u.com熱心網友回復:
我要發送身份證號uj5u.com熱心網友回復:
上面沒說清楚,我是要向pbdw90視窗發送一個身份證號uj5u.com熱心網友回復:
發送身份證號,這是內容,訊息是wm_settext?
settext不能向dw發送,因為dw本身是不能編輯了,當你點擊某個列時,pb會生成一個編輯框放在那個列的當前行上,你可以抓取到那個編輯框的handle,然后發送wm_settext
uj5u.com熱心網友回復:
我用視窗探測器只探測出了pbdw90視窗,沒有編輯框出現
uj5u.com熱心網友回復:
我在pb程式中的測驗代碼:Function integer SndMsg(long hWnd, long uMsg, long wp, &
ref string filename) library "user32.dll" Alias For "SendMessageA"
long ll_dw_handle
ll_dw_handle = handle(dw_1)
string s
s="c:\111.txt"
SndMsg(ll_dw_handle, 1305, 2, s)
這個代碼要導致pb軟體崩潰
uj5u.com熱心網友回復:
用以下函式可以捕捉到編輯框WindowFromPoint
VB宣告
Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
說明
回傳包含了指定點的視窗的句柄。忽略屏蔽、隱藏以及透明視窗
回傳值
Long,包含了指定點的視窗的句柄。如指定的點處沒有視窗存在,則回傳零
引數表
引數 型別及說明
xPoint Long,x點值
yPoint Long,y點值
uj5u.com熱心網友回復:
不行,取到的還是那個pbdw90視窗句柄
uj5u.com熱心網友回復:
另外建議一下,當前的焦點只有在資料視窗時才會有那個編輯框,如果焦點切換到別的視窗,那個編輯框就沒有了
如果還只能取得pbdw90的視窗句柄,那就沒有辦法了
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/38366.html
標籤:API 調用
上一篇:pb com
