線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:6571
推到 Plurk!
推到 Facebook!

如何觸發另一個程式中某個按鈕OnClick的事件?

尚未結案
wivern
初階會員


發表:31
回覆:63
積分:28
註冊:2002-07-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-19 09:53:25 IP:61.219.xxx.xxx 未訂閱
我已經可以找到程式中按鈕的Handle, 接下來我要怎麼做才能讓那個按鈕觸發點選的事件呢?? 除了模擬滑鼠或是鍵盤對按鈕送出click或是按下enter之外, 還有其他的方法嗎?? 我是想用SendMessage,不過裡面的參數要怎麼填呢?? 我用GetDlgCtrlID取得那個按鈕的ID, 這個值對我有幫助嗎?? 還請各位幫幫我!! 感激不盡!!
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-19 10:11:50 IP:61.30.xxx.xxx 未訂閱
這裏有網友先前談論過的文章,您可以參考看看 http://delphi.ktop.com.tw/topic.php?topic_id=27301
wivern
初階會員


發表:31
回覆:63
積分:28
註冊:2002-07-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-19 11:38:45 IP:61.219.xxx.xxx 未訂閱
謝謝版主的回應,那一篇我看過了, 以那一篇的方法,我可以送"Enter”的值給按鈕~ 除了這個方法,還有其他的方法嗎?? 像是SendMessage(Handle,WM_COMMAND,ItemID,0) 這方法不知可不可以用??
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-19 23:21:35 IP:61.221.xxx.xxx 未訂閱
引言: 像是SendMessage(Handle,WM_COMMAND,ItemID,0) 這方法不知可不可以用??
wivern 你好: 請參考以下的做法,試試看行不行呢??
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
wivern
初階會員


發表:31
回覆:63
積分:28
註冊:2002-07-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-21 09:34:49 IP:61.219.xxx.xxx 未訂閱
引言:
引言: 像是SendMessage(Handle,WM_COMMAND,ItemID,0) 這方法不知可不可以用??
wivern 你好: 請參考以下的做法,試試看行不行呢?? >< face="Verdana, Arial, Helvetica"> 謝謝版主的回答,我試過了上面的方法, 不過奇怪的是,不是每次都可以成功, 有時有用,有時會看到按鈕有按下又彈起的動作, 不過並沒有引發按下之後的事件~ 這是怎麼回事呢?
wivern
初階會員


發表:31
回覆:63
積分:28
註冊:2002-07-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-21 10:20:17 IP:61.219.xxx.xxx 未訂閱
我用 PostMessage(HWin, WM_KEYDOWN, VK_RETURN, 0); PostMessage(HWin, WM_KEYUP, VK_RETURN, 0); 就可以~~ 看來還是只能用送Enter這個方法了~~
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-21 18:36:45 IP:211.23.xxx.xxx 未訂閱
我就不懂...之前有人給你 >
wivern
初階會員


發表:31
回覆:63
積分:28
註冊:2002-07-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-21 22:07:06 IP:61.231.xxx.xxx 未訂閱
引言: 我就不懂...之前有人給你 > < 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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-05-22 00:22:47 IP:211.76.xxx.xxx 未訂閱
wivern:    我只能深深的給你鞠個躬, 之前如有冒犯之處, 請多見諒.    原來事情沒有憨人想的這麼簡單 聽你這麼一道來, 原來 > (不要笑我) 找個時間我也來玩玩看 加油唷~ 難得自己玩 >
wivern
初階會員


發表:31
回覆:63
積分:28
註冊:2002-07-31

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-05-22 11:39:32 IP:61.219.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-05-22 13:05:01 IP:211.23.xxx.xxx 未訂閱
不錯唷, 分享這麼寶貴的心得.    依我的拙見, VC++因為全部是純手工打造出來的, 所以就演伸出這樣的技巧. BCB/Delphi由於Borland幫我們把基本的VCL都打造好了, 所以從開始學Win32程式時, 可能就忽略到Window的精神就是Windows Message. 不過經你這麼一提, 學到一個不錯的控制技巧. 這和WM_USER的概念有那麼的一點相似, 但是還是有所不同    在這裡, 我學到WM_COMMAND是不是沒人在用? 如果真的是這樣, 那真的可以讓我們自己拿來define成如此般的控制方法, 也不失為一個很好的方式嚕
wivern
初階會員


發表:31
回覆:63
積分:28
註冊:2002-07-31

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-05-22 15:19:17 IP:61.219.xxx.xxx 未訂閱
我繼續用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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-05-22 16:20:11 IP:211.23.xxx.xxx 未訂閱
引言: 不過問到這裡,好像和本篇文章的題目已經沒什麼關係了...
< > 好像是這樣沒錯啦~ 不過你的經驗很寶貴唷 那就把接下來的心得, 在另外一篇好好討論吧< > http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30826 看到這裡, 不知道各位和我們常在玩OS, 測OS為工作的人, 有沒有類似的心得: M$ 說一套作一套, 在一些很少人碰觸的邊緣地帶, 文件寫歸寫, 自己的經驗最重要 ^^
wivern
初階會員


發表:31
回覆:63
積分:28
註冊:2002-07-31

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-05-22 16:36:41 IP:61.219.xxx.xxx 未訂閱
引言:
引言: 不過問到這裡,好像和本篇文章的題目已經沒什麼關係了...
< > 好像是這樣沒錯啦~ 不過你的經驗很寶貴唷 那就把接下來的心得, 在另外一篇好好討論吧< > http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30826 看到這裡, 不知道各位和我們常在玩OS, 測OS為工作的人, 有沒有類似的心得: M$ 說一套作一套, 在一些很少人碰觸的邊緣地帶, 文件寫歸寫, 自己的經驗最重要 ^^
那一篇的標題是如何得到identify,討論程式處理Message的方法好像也離題了~ 其實我的工作不是在測OS...我工作的單位是無線通信研究室, 平常就是看一些GPRS、UMTS的Paper,可是整個計劃讀資工的就我一個, 所以programming這部份的工作就全落到我頭上了~我也是這幾個禮拜才開始接觸window message這部份的東西~ 害我做到現在覺得和無線的領域愈離愈遠了.....
firewing
一般會員


發表:23
回覆:47
積分:19
註冊:2002-12-13

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-05-22 16:47:27 IP:139.223.xxx.xxx 未訂閱
不好意思~~~ SendMessage(Button->Handle, BM_CLICK, 0, 0); 這樣是不是就會產生 OnClick 的 Message 不曉得有沒有誤會你的意思.....
wivern
初階會員


發表:31
回覆:63
積分:28
註冊:2002-07-31

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-05-22 17:00:09 IP:61.219.xxx.xxx 未訂閱
引言: 不好意思~~~ 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

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-05-22 17:13:30 IP:139.223.xxx.xxx 未訂閱
沒關係~~我只是提出來看看是否有符合你的需求 至於分數~~沒關係......
系統時間:2024-04-27 2:05:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!