2011-12-28 2 views
1

私が作ってくれていないゲームのクライアントローダーで作業しています。私はクライアントに送るためのマウスイベントとキーイベントのライブラリを構築しました。彼らは大部分の仕事をしています。しかし、私は理解できないような1ビットがあります。どの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);のようなものを試してみましたメニュー
  • を開くためのホットキーがありますチャット開くために入力する前にEnterキーを押すことが要求されるゲーム中の

    1. ゲームはそれを処理しません。 PostMessageを使ってメニューを開くと、同じことが起こります。メッセージを送信する前にチャットウィンドウが開いていない限り、何も解析されません。

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

      1. をWM_CHAR
      2. WM_SYSCHAR
      3. WM_MENUCHAR
      4. WM_HOTKEY
      5. WM_APPCOMMAND
      6. WM_KEYUP

      そしておそらく他のいくつか続いWM_KEYDOWN、ない運。誰がどのコマンドがうまくいくか知っていますか?

    答えて

    4

    これが機能するには、幸いになるはずです。キーボード入力は単なるメッセージではありません。また、(とりわけ)GetKeyboardStateGetAsyncKeyStateに影響し、これらの入力をシミュレートすることは重要ではありません。また、キーボードのフォーカスが他の場所にある場合、それは物事を台無しにする可能性があります。

    少し低いレベルのメッセージを生成するために、WM_KEYDOWNWM_KEYUPを投稿してみることができます。

    下位レベルはまだキーボードドライバからの入力をシミュレートするSendInputです。キーボードフォーカスは適切な場所になければなりません。そうしないと入力が間違ったウィンドウに送られます。

    +0

    SendInputは最高の賭けのようですが、パラメータを見ることでウィンドウハンドルを取ることはありません。 PostMessageが必要な理由は、画面を最小限に抑えながらデータを送信できるからです。多分私はそれを間違って読んでいるが、SendInputは画面の完全な焦点を必要とするようだ。 – ozdrgnaDiies

    +1

    あなたはわかりません。 「フォーカス」は、キーボード入力の仕組みです。一度に1つのウィンドウだけがキーボード入力メッセージを受け取ることができます:キーボードフォーカスのあるウィンドウ。あなたが集中していないウィンドウにキーボード入力を送信しようとしているなら、あなたは賭博をしています。この場合、あなたは失うように聞こえるでしょう。 – tenfour

    +0

    これを説明する別の方法は...ウィンドウを指定することができれば、キーボード入力のシミュレーションをうまくやっていないことです。キーボードドライバはウィンドウハンドルについて何も知らない。 – tenfour

    0

    WM_KEYDOWNの後にWM_KEYUPを試してください。 VK_ENTERコードで(私は思う)。

    +0

    私もそれらを試したことを忘れてしまった。 Charがうまくいかなかった後、これは私の2番目の推測でした。それをリストに追加します。 – ozdrgnaDiies

    関連する問題