2011-02-02 26 views
2

ゲームにメッセージを送信しようとしています(テキストコマンドを自動化しようとしています)、spy ++の情報を使ってC#sendmessageを書く方法がわかりません関数。
私はspy ++を入手することができました
これは何を意味するのか、どのようにメッセージをCでゲームに送るのでしょうか?Spy ++からのメッセージを送信する

編集: 私は間違ったプロセスを見ていることがわかりました。 javaw.exeを見る代わりに、私は実際のゲームを見ていました。ここ は、Tを押圧するためのコードです:

<00919> 0038062A WM_INPUT nInputCode:RIM_INPUT hRawInput:189E0973 
<00920> 0024052 P WM_KEYUP nVirtKey:'T' cRepeat:1 ScanCode:14fExtended:0fAltDown:0fRepeat:1fUp:1 

おかげで、
マックス

+0

これはC#SendMessage関数ですか?完全な.Netクラスを記述する。 –

+0

それは問題ではありません、私が使っていたものを投稿しますが、誰かが別の解決策を投稿した場合、簡単に変更できます。 – Ben

+0

最新の編集内容を考慮しても、ここにはまだ質問がありますか?もしそうなら、それは何ですか? –

答えて

6

だからPinvoke.netから、SendMessageのために署名を開始することができます:

[DllImport("user32.dll", CharSet = CharSet.Auto)] 
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); 

これは、ウィンドウハンドルtaks、 hWnd、メッセージID、Msg、およびメッセージIDに基づいて測定を変更する2つの汎用パラメータwParamおよびlParamを含む。

Spy ++があなたに表示しているのは、SendMessageに送信されたパラメータです。ご覧のとおり、wParamとlParamは表示されませんが、hwnd、nHittest、およびwMouseMsgは表示されません。これは、Spy ++がWM_SETCURSORメッセージのwParamパラメータとlParamパラメータの意味を実際に知っており、それらをデコードしているからです。

だから送信したものをスパイ++の各部分をデコード:

  1. 00220540 - のhWndパラメータ - メッセージを受信するウィンドウハンドル。
  2. S - これは SendMessage()経由で送信されたもので、 PostMessage()で送信されたものではありません。 http://msdn.microsoft.com/en-us/library/aa265147(v=vs.60).aspx
  3. WM_SETCURSOR - メッセージID - Msgパラメータを参照してください。
  4. hwnd:0024052C - カーソルを含む ウィンドウのハンドル - wParam パラメータ。
  5. nHittest:HTCLIENT - ヒットテスト コード - lParam パラメータの下位語。
  6. wMouseMsg:WM_MOUSEMOVE - マウス メッセージ - lParamパラメータの上位ワード。あなたは、ウィンドウにメッセージを送ることについては行くだろう

方法がある:他のメッセージでは、WindowsのドキュメントのmesssageためMsdn.com上の検索を行うことができます何を意味するかを理解するために

enum WindowMessages { 
    WM_SETCURSOR = 0x0020, 
    WM_MOUSEMOVE = 0x0200, 
    .... 
} 

enum HitTestCodes { 
    HTCLIENT = 1, 
    .... 
} 

.... 
IntPtr hWnd = [get your window handle some how] 
int lParam = ((int)WindowMessages.WM_MOUSEMOVE) << 16 + (int)HitTestCodes.HTCLIENT; 
SendMessage(hWnd, (uint)WindowMessages.WM_SETCURSOR, hWnd, (IntPtr)lParam); 

それで、すべてのことに答えると、これはあなたがコントロールしようとしているゲームにキーを送ることとは関係ないと思います。 WM_SETCURSORはキーボード入力とは関係ありません。

+0

ブレーキのおかげで、とても助かりました。ゲームはjavaでコード化されています。 tを押すと(メッセージエリアを表示する)、上記のメッセージが表示されます。しかし、タイプすると何も得られません。これはJavaランタイムを介して行くことができますか? – Ben

+0

Javaランタイムと関係があるかどうかわかりません。偽のキーボードとマウス入力を送信することは、Windowsでは信頼できるプロセスではありません。私が提案できる唯一のことは、入力が常にフォーカスされたウィンドウに送られるので、SendKeysを呼び出す前に正しいウィンドウにフォーカスがあることを確認することです。 – shf301

+0

私の投稿を修正しました。私は間違ったプロセスを見ていました。そのメッセージを説明することができれば、私はとても幸せになれます。 – Ben

関連する問題