如何觸發另一個程式中某個按鈕OnClick的事件? |
尚未結案
|
wivern
初階會員 發表:31 回覆:63 積分:28 註冊:2002-07-31 發送簡訊給我 |
|
turboted
版主 發表:95 回覆:754 積分:452 註冊:2002-07-23 發送簡訊給我 |
|
wivern
初階會員 發表:31 回覆:63 積分:28 註冊:2002-07-31 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
|
wivern
初階會員 發表:31 回覆:63 積分:28 註冊:2002-07-31 發送簡訊給我 |
|
wivern
初階會員 發表:31 回覆:63 積分:28 註冊:2002-07-31 發送簡訊給我 |
|
lcsboy
版主 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
|
wivern
初階會員 發表:31 回覆:63 積分:28 註冊:2002-07-31 發送簡訊給我 |
引言: 我就不懂...之前有人給你 > >>< face="Verdana, Arial, Helvetica"> 我之前用過一種方法,不過是用在PopupMenu上,先用ResHacker找出 PopupMenu某個選項的id,之後用SendMessage(FormHandle,WM_COMMAND,option.id,0) 就可以直接觸發該選項點選的事件,不需要先按右鍵,等PopupMenu出現再選擇該選項~ 而且如果那個程式跳出來某一個dialog,在ResHack裡也可以看到那個dialog底下所有按鈕的id,之後用 SendMessag(Dialog.Handle,WM_COMMAND,button.id,0) 也可以直接執行那個按鈕的動作,像是關閉Dialog等等~ 舉例來說,下圖是我用ResHacker開啟kkman.exe這個執行檔, 可以看到這個執行檔其中的一個dialog,也可以看到Dialog中"送出"及"取消"這兩個按鈕的ID(用紅圈圈起來)是1和2 當這個dialog出現時,只要抓到這個dialog的handle, 之後用 SendMessag(Dialog.Handle,WM_COMMAND,1,0) 可以送出email; SendMessag(Dialog.Handle,WM_COMMAND,2,0) 會關閉視窗~ 而不用去抓按鈕的Handle,再對那個按鈕送出 " WM_KEYDOWN, VK_RETURN " " WM_KEYUP, VK_RETURN " 不過這個方法對主程式沒有用~ 我的想法是有沒有辦法直接命令程式去執行點選按鈕之後要做的事, 而不是下點選按鈕的命令~就像上面控制Dialog的方法~ 這是我的想法~~也許有些觀念不是很正確~~還請各位多多指教 發表人 - wivern 於 2003/05/22 08:06:18 |
lcsboy
版主 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
|
wivern
初階會員 發表:31 回覆:63 積分:28 註冊:2002-07-31 發送簡訊給我 |
引言: wivern: 我只能深深的給你鞠個躬, 之前如有冒犯之處, 請多見諒. 原來事情沒有憨人想的這麼簡單 聽你這麼一道來, 原來 > (不要笑我) 找個時間我也來玩玩看 加油唷~ 難得自己玩 > >>< face="Verdana, Arial, Helvetica"> 版主大大真是太客氣了~大家也只是經驗交換嘛~ 之前為了我主子的要求, 所以花了許多時間來研究如何控制另一個程式的操作, 也有了一些心得~ 其實不一定要用ResHacker來找Menu及Button的ID, 只要先找到Handle,用GetDlgCtrlID(Handle)就可以得到ID, 不過這個方法只試用於用VC 寫的程式, 就像我另一篇所問的問題, http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30826 要控制Toolbar上的按鈕,只要找到按鈕所對應的id, 再用SendMessage(FormHandle,WM_COMMAND,id,toolbar.Handle)就可以執行對應按鈕的動作~ 我猜想寫VC的程式是根據收到的Message來執行對應的動作, 和BCB不同,所以這種方法對BCB沒有用~ 用ResHacker來開用BCB寫的程式,連Dialog及Menu的資料都沒有~ 雖然可以正確收到Message,不過沒有動作 我沒有寫過VC 的程式,不知我的想法是否正確~ 發表人 - wivern 於 2003/05/22 12:36:24 |
lcsboy
版主 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
不錯唷, 分享這麼寶貴的心得. 依我的拙見, VC++因為全部是純手工打造出來的, 所以就演伸出這樣的技巧.
BCB/Delphi由於Borland幫我們把基本的VCL都打造好了, 所以從開始學Win32程式時, 可能就忽略到Window的精神就是Windows Message.
不過經你這麼一提, 學到一個不錯的控制技巧. 這和WM_USER的概念有那麼的一點相似, 但是還是有所不同 在這裡, 我學到WM_COMMAND是不是沒人在用? 如果真的是這樣, 那真的可以讓我們自己拿來define成如此般的控制方法, 也不失為一個很好的方式嚕
|
wivern
初階會員 發表:31 回覆:63 積分:28 註冊:2002-07-31 發送簡訊給我 |
我繼續用spy 來看用bcb寫的程式收到的message,
發現如果user點選menu的話,會有WM_COMMAND的message送給程式,
所以我就如法泡製,用程式送一個WM_COMMAND給程式,
id裡填在spy 裡看到的message中的id,
發現程式會執行點選該選項的動作,
不過只有menu如此,按鈕就沒有用了~~
為什麼Menu就可以呢??難道它處理message的方式和其他component不同嗎? 不過問到這裡,好像和本篇文章的題目已經沒什麼關係了... 發表人 - wivern 於 2003/05/22 15:20:26
|
lcsboy
版主 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
|
wivern
初階會員 發表:31 回覆:63 積分:28 註冊:2002-07-31 發送簡訊給我 |
引言:那一篇的標題是如何得到identify,討論程式處理Message的方法好像也離題了~ 其實我的工作不是在測OS...我工作的單位是無線通信研究室, 平常就是看一些GPRS、UMTS的Paper,可是整個計劃讀資工的就我一個, 所以programming這部份的工作就全落到我頭上了~我也是這幾個禮拜才開始接觸window message這部份的東西~ 害我做到現在覺得和無線的領域愈離愈遠了.....引言: 不過問到這裡,好像和本篇文章的題目已經沒什麼關係了...< > 好像是這樣沒錯啦~ 不過你的經驗很寶貴唷 那就把接下來的心得, 在另外一篇好好討論吧< > http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30826 看到這裡, 不知道各位和我們常在玩OS, 測OS為工作的人, 有沒有類似的心得: M$ 說一套作一套, 在一些很少人碰觸的邊緣地帶, 文件寫歸寫, 自己的經驗最重要 ^^ |
firewing
一般會員 發表:23 回覆:47 積分:19 註冊:2002-12-13 發送簡訊給我 |
|
wivern
初階會員 發表:31 回覆:63 積分:28 註冊:2002-07-31 發送簡訊給我 |
引言: 不好意思~~~ SendMessage(Button->Handle, BM_CLICK, 0, 0); 這樣是不是就會產生 OnClick 的 Message 不曉得有沒有誤會你的意思.....謝謝你的回應,試了之後,的確就會觸發按鈕 OnClick的事件, 比我之前的方法 PostMessage(HWin, WM_KEYDOWN, VK_RETURN, 0); PostMessage(HWin, WM_KEYUP, VK_RETURN, 0); 好多了~ 原來還有BM_CLICK這個message~之前都不知道~ 可惜我已經結案了,要不然可以給你分數! |
firewing
一般會員 發表:23 回覆:47 積分:19 註冊:2002-12-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |