作者sosokill (隨便殺)
看板C_and_CPP
標題[問題] 對目標視窗模擬發送鍵盤訊息
時間Sat Apr 11 05:33:36 2009
我寫了一個小程式,模擬發送一個鍵盤訊息,再測試的時候是用遊戲程式當作目標視窗,
試過了幾個遊戲,卻發現,如果游標是在對話輸入欄,則可以正常的接收,
但是卻無法啟動技能快捷鍵。
例如:用以下的程式碼為例子,
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)
推 bugmens:可參考11605篇,文章代碼#183zHOD_ ,delphi ktop目前關站 04/11 06:13
→ bugmens:google搜尋KbdClass又是driver的東西,結論:還是花錢好了 04/11 06:19
→ ray2501:keybd_event 04/11 07:20
→ ray2501:或者是使用 SendInput 04/11 07:21
→ ray2501:不要用 Message,用上面二個模擬 04/11 07:24
推 liangjr:keybd_event, mouse_event 04/11 07:44
→ tsaiminghan:可以用vs2005的spy看看你send的訊息和實際上的有什麼 04/11 09:27
→ tsaiminghan:差別 04/11 09:27
→ sosokill:但是使用Keybd_event和SendInput似乎都只能發送至當前的 04/11 14:59
→ sosokill:視窗或全部的視窗,可是我現在是想發送至指定視窗 04/11 14:59
→ sosokill:如果是配合SetForegroundWindow使用,感覺上又不怎好 04/11 15:00
→ sosokill:有沒有兩全其美的方法啊? 04/11 15:00
推 sunneo:SendMessage不好嗎? 可以發送到FindWindow得到的HWND 04/11 22:49
→ tsaiminghan:上面的說法是沒用,可能有擋。 04/11 23:54
→ sosokill:回樓上,會跟postmessage一樣的問題 04/11 23:54
→ ewn:如果SendMessage或PostMessage會被擋的話,那就inject dll 04/12 00:30