私は自分で作ったものではないゲームのクライアントローダーに取り組んでいます。クライアントに送信するマウスイベントとキーイベントのライブラリを作成しましたが、ほとんどの場合機能します。しかし、私には理解できないビットが1つあります。
コードの入力部分を次のようにしました。
[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);
これは問題なく機能しますが、説明されていないことが2つあります。
- ゲーム内では、チャットを開くために入力する前にEnterキーを押す必要があります
- メニューを開くためのホットキーがあります
最初のEnterキーを送信するなどの試みをPostMessage(mainwnd, (uint)WM.CHAR, 0x0D, 1);
しましたが、ゲームはそれを処理しません。PostMessageを使用してメニューを開こうとした場合も同じことが起こります。メッセージを送信する前にチャットウィンドウがすでに開いていない限り、何も解析されません。
間違ったWM_Messageを使用していると思いますが、必要なWM_Messageが見つかりません。私が試してみました:
- WM_CHAR
- WM_SYSCHAR
- WM_MENUCHAR
- WM_HOTKEY
- WM_APPCOMMAND
- WM_KEYDOWNの後にWM_KEYUPが続く
そして多分他のいくつかですが、運がありません。どのコマンドが機能するか知っている人はいますか?