所以,让我们与签名启动SendMessage,从Pinvoke.net:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
它TAKS窗口句柄, hWnd,消息ID,Msg和两个通用参数wParam和lParam,它们根据消息ID改变测量。
什么spy ++显示你是发送到SendMessage的参数。正如你所看到的,它不会向你显示wParam和lParam,而是hwnd,nHittest和wMouseMsg。这是因为Spy ++知道wParam和lParam参数对于WM_SETCURSOR消息实际上意味着什么,并且正在为您解码它们。
所以每一片什么间谍++的解码已经发送:
00220540
- 的窗口句柄接收消息 - 的hWnd参数。
S
- 表示它是通过 SendMessage()发送的,并未通过 发送到PostMessage()。请参阅http://msdn.microsoft.com/en-us/library/aa265147(v=vs.60).aspx
WM_SETCURSOR
- 消息ID - 消息参数 。
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);
对于理解其他消息意味着你可以做什么的Windows文档中的讯息话题上Msdn.com搜索。
所以在回答完所有这些之后,我认为这不会将密钥发送到您想要控制的游戏。 WM_SETCURSOR与键盘输入没有任何关系。
其中C#SendMessage函数?说明完整的.Net类。 – 2011-02-02 02:24:18
没关系,我会发布我正在使用的内容,但如果有人发布了不同的解决方案,我可以轻松地更改它。 – Ben 2011-02-02 02:27:14