[問題] 對目標視窗模擬發送鍵盤訊息

看板C_and_CPP (C/C++)作者 (隨便殺)時間16年前 (2009/04/11 05:33), 編輯推噓4(4014)
留言18則, 7人參與, 最新討論串1/1
我寫了一個小程式,模擬發送一個鍵盤訊息,再測試的時候是用遊戲程式當作目標視窗, 試過了幾個遊戲,卻發現,如果游標是在對話輸入欄,則可以正常的接收, 但是卻無法啟動技能快捷鍵。 例如:用以下的程式碼為例子, hWnd=::FindWindow(NULL,_T("萬王之王3:黛妮雅")); PostMessageA(hWnd,WM_KEYDOWN,0x31,0); 我發送了按下按鍵 "1" 的訊息給 "萬王之王3:黛妮雅" 這個遊戲程式, 如果當時我是正好在輸入對話訊息,則可以成功的模擬輸入, 但如果是在一般的狀態,卻沒辦法觸發快捷鍵1的效果。 原本以為是該遊戲有防止這種情況發生的功能,但是我用按鍵精靈測試, 卻可以成功的模擬輸入。 不知道有人是否能告知一下問題出在哪邊,還是說不應該用Post而要用Send? 另外,我在MSDN網站上有找到有一個SendKeys函式, 該網頁也有註明適用於Microsoft Visual Studio 2005, 但我搜尋過VS2005裡面的Include檔,並沒有找到這個函式,這是為什麼呢? PS:不知道這個有沒有違反版規,因為可以算是外掛的雛型, 如果有,請告知一下,我會自動刪文,感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.129.39.100 ※ 編輯: sosokill 來自: 140.129.39.100 (04/11 05:36)

04/11 06:13, , 1F
可參考11605篇,文章代碼#183zHOD_ ,delphi ktop目前關站
04/11 06:13, 1F

04/11 06:14, , 2F
先給google備份文章http://0rz.tw/mbmW1
04/11 06:14, 2F


04/11 06:19, , 4F
google搜尋KbdClass又是driver的東西,結論:還是花錢好了
04/11 06:19, 4F

04/11 07:20, , 5F
keybd_event
04/11 07:20, 5F

04/11 07:21, , 6F
或者是使用 SendInput
04/11 07:21, 6F

04/11 07:24, , 7F
不要用 Message,用上面二個模擬
04/11 07:24, 7F

04/11 07:44, , 8F
keybd_event, mouse_event
04/11 07:44, 8F

04/11 09:27, , 9F
可以用vs2005的spy看看你send的訊息和實際上的有什麼
04/11 09:27, 9F

04/11 09:27, , 10F
差別
04/11 09:27, 10F

04/11 14:59, , 11F
但是使用Keybd_event和SendInput似乎都只能發送至當前的
04/11 14:59, 11F

04/11 14:59, , 12F
視窗或全部的視窗,可是我現在是想發送至指定視窗
04/11 14:59, 12F

04/11 15:00, , 13F
如果是配合SetForegroundWindow使用,感覺上又不怎好
04/11 15:00, 13F

04/11 15:00, , 14F
有沒有兩全其美的方法啊?
04/11 15:00, 14F

04/11 22:49, , 15F
SendMessage不好嗎? 可以發送到FindWindow得到的HWND
04/11 22:49, 15F

04/11 23:54, , 16F
上面的說法是沒用,可能有擋。
04/11 23:54, 16F

04/11 23:54, , 17F
回樓上,會跟postmessage一樣的問題
04/11 23:54, 17F

04/12 00:30, , 18F
如果SendMessage或PostMessage會被擋的話,那就inject dll
04/12 00:30, 18F
文章代碼(AID): #19txinXy (C_and_CPP)
文章代碼(AID): #19txinXy (C_and_CPP)