Итак, давайте начнем с подписи для SendMessage , от Pinvoke.net :
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
Это берет дескриптор окна, hWnd, идентификатор сообщения,Msg и два универсальных параметра wParam и lParam, которые меняют значения в зависимости от идентификатора сообщения.
Spy ++ показывает вам параметры, которые были отправлены в SendMessage.Как видите, он показывает не wParam и lParam, а hwnd, nHittest и wMouseMsg.Это потому, что Spy ++ знает, что на самом деле означают параметры wParam и lParam для сообщения WM_SETCURSOR , и декодирует их для вас.
Итак, декодируем каждый фрагмент того, что отправил Spy ++:
00220540
- дескриптор окна, получающего сообщение - параметр hWnd. S
- Это означает, что оно было отправлено через SendMessage () и не отправлено через PostMessage () .См. http://msdn.microsoft.com/en-us/library/aa265147(v=vs.60).aspx WM_SETCURSOR
- идентификатор сообщения - параметр Msg. hwnd:0024052C
- дескриптор окна, содержащего курсор - параметр 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 не имеет ничего общего с вводом с клавиатуры.