台灣最大程式設計社群網站
線上人數
1391
 
會員總數:241337
討論主題:186908
歡迎您免費加入會員
討論區列表 >> VB.NET >> 使用postmessage 按鍵點選的問題,需要滑鼠停在上面才可以動作
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
使用postmessage 按鍵點選的問題,需要滑鼠停在上面才可以動作
價值 : 50 QP  點閱數:301 回應數:12

樓主


門外漢
0 11
295 22
發送站內信

各位好:
請問一下 我要用postmessage 去按其他程式的快捷鍵,如圖中圈起來的按鍵



有找到該按鈕的hwnd,也有看到 按鈕有被按下在浮起來的畫面,但是按鈕動作就是不執行
除非將滑鼠停在上面在執行程式按鈕就會有動作.
這樣的話還有甚麼方式可以用呢?除了手動將滑鼠停在上方?
如果真的要滑鼠停在上面但是程式不一定會在固定的地方,這樣要怎樣用程式把滑鼠移到按鈕上方?



搜尋相關Tags的文章: [ postmessage ] ,
本篇文章發表於2017-08-03 17:20
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

練武功
檢舉此回應
1.如果你要用按下滑鼠鍵的方式,建議改用SendMessage這個API,另外TextBox1.Text加上Val(TextBox1.Text)(這個應該不是必要項)。
2.此外,可以利用 SendMessage(hwnd2, &H10, 0, 0),直接將執行的訊息傳給電腦,應該也可以達成按下按鈕的目的。
3.試試看,不敢保證有效。
本篇文章回覆於2017-08-04 20:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應


檢舉此回應
感謝回覆
使用之後 變成按鈕消失了...XD
本篇文章回覆於2017-08-07 09:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

練武功
檢舉此回應
按鈕消失了!真是個有趣的結果。

如果你用按下滑鼠的方式,要注意視窗焦點的問題。通常按下某個視窗的按鈕,只是讓這個視窗得到焦點,成為前景視窗,必須再按一次才是真正的按下按鈕指令。

你可以試試按下2次滑鼠。
本篇文章回覆於2017-08-08 09:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應


檢舉此回應
抱歉太晚回覆,這方式我也有試過讓要被控制的視窗在最頂層,取得焦點,測試過必須要讓滑鼠停在按鈕上方才有用,
所以不知道有沒其他辦法,知道按鈕的hwnd然後把滑鼠移到上方..
本篇文章回覆於2017-08-10 07:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

練武功
檢舉此回應
那個按鈕的視窗識別碼你是如何取得的呢?看樣子,你的TextBox.Text似乎不是那個按鈕的視窗識別碼,而是那個應用程式的主視窗識別碼?
本篇文章回覆於2017-08-10 09:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應


檢舉此回應
我是用一套小軟體 視窗階層小工具 阿戊大大設計的
滑鼠移到哪邊就抓哪邊的hwnd and class_name Window_name.
hwnd的話確定是沒錯,因為滑鼠放在隔壁科按鍵會沒反應
而且使用&H10 消失的也是我所輸入hwnd的那一顆按鍵
&H10 上網查是 WM_CLOSE
本篇文章回覆於2017-08-10 11:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
最有價值解答

練武功
檢舉此回應
我實際用2個form視窗測試,結果是OK的。
依據你的程式,只剩下Delay(100)這行。
一般情形我都是使用 System.Threading.Thread.Sleep(20)
就不知道你的Delay這個函數的內容,也有可能是停留100毫秒太久,你可以再試試。

此外,除了模擬滑鼠按下左鍵,也可以利用固定按鈕的位置來按下左鍵,過程如下
1.用FindWindow找到該應用程式的主視窗識別碼
2.用SetWindowPos將該視窗的位置固定在(0,0)
以上2個過程可以用手動將視窗最大化
3.找到按鈕的位置(這可能要靠手動了)
4.用mouse_event 模擬滑鼠按下左鍵。
本篇文章回覆於2017-08-10 15:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應


檢舉此回應
這樣就可以了..
1. Findwindow 找hwnd
2. SetWindowPos 將視窗固定在某一點
3. SetCursorPos 將滑鼠移到按鈕上面
4. Sendmessage or mouse_event ..按下滑鼠按鈕
感謝!
本篇文章回覆於2017-08-11 09:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

練武功
檢舉此回應
請問你是過將Delay的時間改少一些,或是使用System.Threading.Thread.Sleep(20)嗎?
本篇文章回覆於2017-08-11 11:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應


檢舉此回應
delay沒變也沒去測System.Threading.Thread.Sleep(20),就是多了把滑鼠移到按鈕上方 那顆按鈕就是這麼奇怪= =滑鼠不再上面就不動作0.0
本篇文章回覆於2017-08-11 12:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

P陳
檢舉此回應
眠 您好:

最近也有相同的困擾,請問您能將程式寄給我參考嗎?
我用的是 SendKeys.send 的方式,感覺可以再修正

謝謝

jcchen@mail.lksh.chc.edu.tw
陳志昌 上
本篇文章回覆於2017-08-13 09:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應


檢舉此回應
直接回在這邊好了 .論壇裡高手很多順便可以幫我看看有沒錯
首先宣告這幾個
http://www.pinvoke.net/index.aspx <--可以從這邊找怎宣告
Findwindow '找主事窗的HWND
Findwindowex '找子視窗或其他東西的HWND
Sendmessage
Postmessage
SetWindowPos '設定視窗的位置
SetCursorPos '設定滑鼠位置
GetCursorPos '取得滑鼠位置

1.先用Findwindow 找主視窗的HWND
2.再用Findwindowex 往下找到你要的子視窗 或 按鈕 或 其他...等
可以參考VS裡面 的 工具-->SPY++ 去對應看找的對不對
3.用SetWindowPos 用主視窗的HWND設定主視窗的位置 例如(0,0)
怪怪的按鈕需要 滑鼠在上方
4.主視窗在0,0的時候,把滑鼠移到那顆按鈕上面,用GetCrusorPos 取得滑鼠位置 <--一開始測試時才要用
5.用SetCursorPos設定剛剛取得的滑鼠位置
6.用Postmessage 送出 WM_LBUTTONDOWN WM_LBUTTONUP

有很多按鈕其實不用這樣
直接找到按鈕的HWND...然後用 Postmessage 送出 BM_CLICK 就可以動作.
本篇文章回覆於2017-08-14 08:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.