发送来自Spy ++的消息

时间:2011-02-02 01:35:13

标签: c# pinvoke sendmessage spy++

嘿伙计们,我正在尝试向游戏发送消息(自动化文本命令),问题是我无法弄清楚如何使用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

谢谢,
最大

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 ++发送的每一段内容:

  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参数。
  7. 将消息发送到窗口的方式是:

    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与键盘输入没有任何关系。