首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发送从Spy++获取的消息

发送从Spy++获取的消息
EN

Stack Overflow用户
提问于 2011-02-02 09:35:13
回答 1查看 5.7K关注 0票数 4

我正在尝试向游戏发送消息(自动执行文本命令),问题是我不知道如何使用spy++中的信息来编写C#发送消息函数。

我能够使用spy++获取00220540 S WM_SETCURSOR hwnd:0024052C nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE

有没有人能详细解释一下这意味着什么,以及如何在c#中向游戏发送消息?

编辑:

我发现我看错了流程。我看的不是javaw.exe,而是实际的游戏。

下面是按t的代码:

代码语言:javascript
复制
<00919> 0038062A WM_INPUT nInputCode:RIM_INPUT hRawInput:189E0973
<00920> 0024052 P WM_KEYUP nVirtKey:'T' cRepeat:1 ScanCode:14fExtended:0fAltDown:0fRepeat:1fUp:1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-02 12:00:11

那么让我们从来自Pinvoke.netSendMessage签名开始

代码语言:javascript
复制
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

它有一个窗口句柄,hWnd,一个消息ID,Msg,以及两个通用参数wParam和lParam,它们根据消息ID改变含义。

spy++向您显示的是发送到SendMessage的参数。正如您所看到的,它并没有显示wParam和lParam,而是显示了hwnd、nHittest和wMouseMsg。这是因为Spy++知道wParam和lParam参数对WM_SETCURSOR消息的实际含义,并为您解码它们。

因此,解码Spy++发送的内容的每一部分:

  1. 00220540 -接收消息的窗口句柄- hWnd parameter.
  2. S -这意味着它是通过SendMessage()发送的,而不是通过PostMessage()发布的。参见http://msdn.microsoft.com/en-us/library/aa265147(v=vs.60).aspx
  3. WM_SETCURSOR -消息ID -包含光标的窗口的消息parameter.
  4. hwnd:0024052C句柄- wParam parameter.
  5. nHittest:HTCLIENT -命中测试代码- lParam parameter.
  6. wMouseMsg:WM_MOUSEMOVE的低位字-鼠标消息- lParam参数的高位字。

将消息发送到窗口的方法是:

代码语言:javascript
复制
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与键盘输入没有任何关系。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4869941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档