我正在爲不是由我製作的遊戲的客戶端加載程序。我已經建立了一個鼠標和鍵盤事件庫發送給客戶,他們大部分工作。然而,有一點我似乎無法弄清楚。要使用哪個WM_Message?
我做了我的代碼這個打字部分:
[DllImport("user32.dll")]
public static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, uint wParam, uint lParam);
//Send each character of string one at a time
foreach(Char c in Input)
PostMessage(mainwnd, (uint)WM.CHAR, c, 1);
//Send final enter key to send message in game
PostMessage(mainwnd, (uint)WM.CHAR, 0x0D, 1);
這工作得很好,但有兩件事情是不佔。
- 在遊戲中的你需要按下回車鍵式打開聊天之前
- 有熱鍵打開菜單
我已經試過的東西像PostMessage(mainwnd, (uint)WM.CHAR, 0x0D, 1);
送一開始就進入鍵,但遊戲並沒有處理它。同樣的事情發生,如果我使用PostMessage嘗試打開菜單。除非聊天窗口在發送消息之前已經打開,否則沒有任何內容被分析。
我想我正在使用錯誤的WM_Message,但我找不到我需要的一個。我曾嘗試:
- WM_CHAR
- WM_SYSCHAR
- WM_MENUCHAR
- WM_HOTKEY
- WM_APPCOMMAND
- WM_KEYDOWN之後WM_KEYUP
和其他人也許不多,但沒有運氣。有誰知道哪個命令可能工作?
SendInput看起來是最好的選擇,但從查看參數它不需要窗口句柄。我需要PostMessage的原因是我可以在屏幕最小化時發送數據。也許我讀錯了,但SendInput似乎需要完整的屏幕焦點。 – ozdrgnaDiies 2011-12-28 01:51:53
你不明白; 「重點」是鍵盤輸入如何工作。一次只有一個窗口可以接收鍵盤輸入消息:具有鍵盤焦點的窗口。如果您嘗試將鍵盤輸入發送到未聚焦的窗口,那麼您就是賭博,在這種情況下,聽起來就像輸了。 – tenfour 2011-12-28 01:53:43
解釋這個問題的另一種方法是......如果你可以指定一個窗口,你在模擬鍵盤輸入方面做得並不好。鍵盤驅動程序不知道關於窗口句柄的任何信息。 – tenfour 2011-12-28 01:58:25