それでは、 Pinvoke.netからのSendMessageの署名から始めましょう。
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
これは、ウィンドウ ハンドル hWnd、メッセージ ID、Msg、およびメッセージ ID に基づいて意味を変更する 2 つの汎用パラメーター wParam と lParam を取ります。
spy++ が表示しているのは、SendMessage に送信されたパラメーターです。ご覧のとおり、wParam と lParam は表示されませんが、hwnd、nHittest、wMouseMsg は表示されます。これは、Spy++ がWM_SETCURSORメッセージの wParam パラメーターと lParam パラメーターが実際に何を意味するかを認識しており、それらをデコードしているためです。
したがって、Spy++ が送信したものの各部分をデコードします。
00220540
- メッセージを受信するウィンドウ ハンドル - hWnd パラメータ。
S
- SendMessage() 経由で送信され、
PostMessage()経由で投稿されなかったことを意味します。http://msdn.microsoft.com/en-us/library/aa265147(v=vs.60).aspxを参照してください。
WM_SETCURSOR
- メッセージ ID - Msg パラメータ。
hwnd:0024052C
- カーソルを含む Window のハンドル - wParam パラメータ。
nHittest:HTCLIENT
- ヒット テスト コード - lParam パラメータの下位ワード。
wMouseMsg:WM_MOUSEMOVE
- マウス メッセージ - lParam パラメータの上位ワード。
メッセージをウィンドウに送信する方法は次のとおりです。
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);
その他のメッセージの意味を理解するには、Msdn.com で Windows ドキュメントのメッセージを検索してください。
そのすべてに答えた後、これは、制御しようとしているゲームにキーを送信することとは何の関係もないと思います。WM_SETCURSOR はキーボード入力とは関係ありません。