2011-02-02 69 views
2

嘿家伙,我想发送消息给游戏(自动化文本命令),问题是,我不知道如何使用从间谍++的信息写一个C#sendmessage功能。
我能够使用间谍++获得 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

其中C#SendMessage函数?说明完整的.Net类。 – 2011-02-02 02:24:18

+0

没关系,我会发布我正在使用的内容,但如果有人发布了不同的解决方案,我可以轻松地更改它。 – Ben 2011-02-02 02:27:14

回答

6

所以,让我们与签名启动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消息实际上意味着什么,并且正在为您解码它们。

所以每一片什么间谍++的解码已经发送:

  1. 00220540 - 的窗口句柄接收消息 - 的hWnd参数。
  2. S - 表示它是通过 SendMessage()发送的,并未通过 发送到PostMessage()。请参阅http://msdn.microsoft.com/en-us/library/aa265147(v=vs.60).aspx
  3. WM_SETCURSOR - 消息ID - 消息参数 。
  4. hwnd:0024052C - 包含光标的窗口 的句柄 - wParam 参数。
  5. nHittest:HTCLIENT - 命中测试 代码 - 参数lParam 的低位字。
  6. 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与键盘输入没有任何关系。