日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何用SendMessage模拟某一按钮的点击事件

發布時間:2025/3/12 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何用SendMessage模拟某一按钮的点击事件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天在寫程序的時候,用到了進程間的通信,上網查了些相關的資料,一般都是通過消息、共享內存、 socket,管道(Pipe),信箱(Mailslot),等等。因為我進程間通信的時候數據量不太大,所以就先測試了一下消息。

一 般情況下,用消息來實現進程通信相對比較簡單,自定義消息、手動添加消息映射、編寫響應函數,發送端先FindWindow(),然后就向目標進程 SendMessage()。自定義消息的測試沒有什么問題,但在向目標進程發送系統消息時遇到了些問題,發送WM_CLOSE消息也可以,但是在我嘗試 發送按鈕消息時,遇到了些麻煩,在查資料,并多次測試后終于搞定,看到網上一些資料都沒有明確的答案,就把我的一些體會發在這里,有朋友遇到這個問題時也 就少走點彎路。當然,我個人水平也很菜,高手就不要看了!

自定義消息和消息映射就不多說了,獲取窗口進程:
CWnd *pWnd=CWnd::FindWindow(NULL,str);

模擬其中窗口上的按鈕點擊事件可以采用以下的方法:

1、pWnd->SendMessage(WM_COMMAND,IDC_BUTTON1,0);

2、pWnd->SendMessage(WM_COMMAND,((WPARAM)BN_CLICKED)<<8|(WPARAM)IDC_BUTTON1,0L);

3、pWnd->SendDlgItemMessage(IDC_BUTTON1,BM_CLICK,0,0);

4、::SendMessage(pWnd->GetSafeHwnd(),WM_COMMAND,IDC_BUTTON1,NULL);

5、::SendMessage(pWnd->GetDlgItem(IDC_BUTTON1)->GetSafeHwnd(),WM_LBUTTONDOWN,IDC_BUTTON1,0);
::SendMessage(pWnd->GetDlgItem(IDC_BUTTON1)->GetSafeHwnd(),WM_LBUTTONUP,IDC_BUTTON1,0);

6、pWnd->GetDlgItem(IDC_BUTTON1)->SendMessage(WM_LBUTTONDOWN);
pWnd->GetDlgItem(IDC_BUTTON1)->SendMessage(WM_LBUTTONUP);

注意:
1、如果模擬自己進程內的按鈕,前面的方法都可以使用,將其中pWnd替換為this或直接為空即可。

2、如果是向另外一個進程發送消息,并模擬另外進程中的按鈕的點擊事件,那么有一點要注意,就是其中的按鈕ID號,不能使用比如IDC_BUTTON1這樣的宏,因為在本程序里也有定義,并且這個值可能和你想要模擬的按鈕的ID在它所在的進程中的ID不同,它會被默認
替換為本進程內的值。
舉個例子,現在你編寫了兩個對話框程序A和B,在程序A中,定義了兩個按鈕,分別為IDC_BUTTON1和IDC_BUTTON2,打開Resource.h查看一下它們的ID值:
#define IDC_BUTTON1 1000
#define IDC_BUTTON2 1001
在程序B中,定義了一個按鈕,名字為IDC_BUTTON1,打開Resource.h查看一下該按鈕的ID值:
#define IDC_BUTTON1 1001
從兩個頭文件中可以看出,程序A中的IDC_BUTTON2和ID值和程序B中的IDC_BUTTON1的ID值相同,而兩個程序的IDC_BUTTON1的值并不相同。
注意,問題就出在這這兒。如果我們想模擬程序B中按鈕IDC_BUTTON1的點擊事件,按照前面的方法是行不通的,不信可以試試。
但 如果我們在使用前面的那些方法時,改變一下傳遞的參數,將其中的IDC_BUTTON1改為IDC_BUTTON2,試一下,進程B中的按鈕成功的模擬出 來了,竟然達到了我們的目標。那么奇怪,明明B程序中按鈕的ID是IDC_BUTTON1啊!現在改為IDC_BUTTON2反而成功了呢?為什么會這樣 呢?
其實這主要是因為兩個程序的不同引起的,因為我們在A程序中調用前面的方法來模擬程序B的按鈕時,程序B中的IDC_BUTTON1按鈕的實 際的ID值是非曲直1001,而程序A中卻把IDC_BUTTON1的值設為了1000,所以無論你怎么發送消息都沒用,程序B里面1000的ID值并不 是IDC_BUTTON1對應的值,它實際的值應該是1001。不信的話,可以用1001代替IDC_BUTTON1,然后用前面的那些方法試試。 Tags: findwindow , sendmessage , vc

總結

以上是生活随笔為你收集整理的如何用SendMessage模拟某一按钮的点击事件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 高清国产在线 | 欧美性色网站 | 久久永久免费 | 911美女片黄在线观看游戏 | 黄色网页免费在线观看 | 人妻视频一区二区三区 | 日韩在线视频二区 | 午夜视频一区二区三区 | 久精品国产| 啪啪免费视频网站 | a天堂中文 | 亚洲黄色网址 | 狼人综合伊人 | 欧美三级精品 | 成人精品一区二区三区中文字幕 | 夜夜成人| 午夜激情在线视频 | 天堂精品一区 | 天天干天天爱天天操 | 综合久| 国内偷拍一区二区 | 国产成人网| www.亚洲人| 成人免费一级 | 久草热视频 | 337p粉嫩大胆色噜噜噜 | 中文字幕在线播放不卡 | 超碰久操 | 亚洲精品aa| 看毛片看毛片 | 亚欧洲精品视频在线观看 | 99久久99久久| 国产精品51麻豆cm传媒 | 九色av| 福利小视频在线 | 日韩综合 | 裸体视频软件 | 91操人 | 国产精品theporn动漫 | 日日干干 | 日韩少妇 | 欧美xxxx黑人又粗又长密月 | 中文字幕在线免费看线人 | 国产精品日日摸夜夜爽 | 丝袜视频在线 | 久久久久人妻精品色欧美 | 色哟哟一区二区 | 可以免费看av的网站 | 漂亮人妻被中出中文字幕 | 色欲国产精品一区二区 | 91精品国产麻豆国产自产在线 | 亚洲AV无码一区二区伊人久久 | 美女日批网站 | 91系列在线观看 | 日本三级片在线观看 | 日韩中文字幕视频在线观看 | 天天色综合久久 | 免费av大片 | 人人搞人人爱 | 国产一区精品视频 | 桃花久久 | 色噜噜色综合 | 性色欲网站人妻丰满中文久久不卡 | 四虎av影视| √资源天堂中文在线视频 | 欧美在线视频一区二区三区 | 国产精品人成 | 91免费进入| 一区二区三区国产精品视频 | 中文字幕av久久爽 | 激情全身裸吻胸 | 国产免费福利 | 亚洲欧美激情精品一区二区 | 青青国产视频 | 美腿丝袜一区二区三区 | 国产女主播喷水高潮网红在线 | 99久久综合国产精品二区 | 2024av| 亚洲男人网站 | 日本a级在线 | 国产视频在线观看视频 | 国产精品欧美激情 | 狠狠人妻久久久久久综合麻豆 | 激情视频激情小说 | 午夜精品毛片 | 欧美亚洲国产日韩 | 一级黄色大片免费观看 | 香蕉视频在线网址 | 无遮挡在线观看 | 国产精品国产三级国产aⅴ无密码 | 操操操综合 | 怡春院一区二区 | 春色av| 免费在线观看成年人视频 | 成人网av | www.在线观看av | 91麻豆影院 | 日韩精品一区二区不卡 | 天堂在线成人 |