嘿伙计们,我正在尝试向游戏发送消息(自动化文本命令),问题是我无法弄清楚如何使用spy ++中的信息来编写C#sendmessage函数。
我能够使用spy ++来获取
00220540 S WM_SETCURSOR hwnd:0024052C nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE
任何人都可以提供这意味着什么的细分,以及如何在c#中将消息发送到游戏?
编辑: 我发现我正在查看错误的过程。我没有看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 :(得分:6)
让我们从SendMessage开始使用Pinvoke.net的签名:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
它获取一个窗口句柄,hWnd,一个消息ID,Msg和两个通用参数wParam和lParam,它们根据消息ID更改meaing。
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
- 消息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);
要了解其他消息的含义,您可以在Msdn.com上搜索Windows文档中的消息。
因此,在回答了所有这些之后,我认为这与将你想要控制的游戏发送密钥无关。 WM_SETCURSOR与键盘输入没有任何关系。