1

私は自分で作ったものではないゲームのクライアントローダーに取り組んでいます。クライアントに送信するマウスイベントとキーイベントのライブラリを作成しましたが、ほとんどの場合機能します。しかし、私には理解できないビットが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つあります。

  1. ゲーム内では、チャットを開くために入力する前にEnterキーを押す必要があります
  2. メニューを開くためのホットキーがあります

最初のEnterキーを送信するなどの試みをPostMessage(mainwnd, (uint)WM.CHAR, 0x0D, 1);しましたが、ゲームはそれを処理しません。PostMessageを使用してメニューを開こうとした場合も同じことが起こります。メッセージを送信する前にチャットウィンドウがすでに開いていない限り、何も解析されません。

間違ったWM_Messageを使用していると思いますが、必要なWM_Messageが見つかりません。私が試してみました:

  1. WM_CHAR
  2. WM_SYSCHAR
  3. WM_MENUCHAR
  4. WM_HOTKEY
  5. WM_APPCOMMAND
  6. WM_KEYDOWNの後にWM_KEYUPが続く

そして多分他のいくつかですが、運がありません。どのコマンドが機能するか知っている人はいますか?

4

2 に答える 2

4

これが機能するためには幸運を得る必要があります。キーボード入力は単なるメッセージではありません。また、(とりわけ)影響を及ぼしGetKeyboardStateGetAsyncKeyStateこれらを使用して入力をシミュレートすることは簡単ではありません。そして、キーボードの焦点が他の場所にある場合、それは物事を台無しにする可能性があります。

投稿WM_KEYDOWNWM_KEYUPて、少し低レベルのメッセージを生成してみてください。

下位レベルの静止画はSendInput、キーボードドライバーからの入力をシミュレートします。キーボードフォーカスは正しい場所にある必要があります。そうしないと、入力が間違ったウィンドウに送信されます。

于 2011-12-28T01:44:13.487 に答える
0

WM_KEYDOWNを試してから、WM_KEYUPを試してください。VK_ENTERコードを使用します(私は思います)。

于 2011-12-28T01:42:00.823 に答える