Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 发送从Spy++;_C#_Pinvoke_Sendmessage_Spy++ - Fatal编程技术网

C# 发送从Spy++;

C# 发送从Spy++;,c#,pinvoke,sendmessage,spy++,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

我正在尝试向游戏发送消息(自动执行文本命令),问题是我不知道如何使用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
0038062A WM_输入输入nInputCode:RIM_输入hRawInput:189E0973
0024052 P WM_KEYUP nVirtKey:“T”重复:1扫描代码:14F扩展:0fAltDown:0fRepeat:1UP:1

因此,让我们从以下签名开始:

它使用一个窗口句柄hWnd、一个消息ID Msg和两个通用参数wParam和lParam,它们根据消息ID更改meain

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

所以解码Spy++发送的每一条信息:

  • 00220540
    -接收消息的窗口句柄-hWnd参数
  • S
    -表示它是通过 SendMessage()且未通过 . 看
  • WM_SETCURSOR
    -消息ID- Msg参数
  • hwnd:0024052C
    -窗口把手 包含光标-wParam 参数
  • nHittest:HTCLIENT
    -命中测试 code—LPRAM的低位字 参数
  • 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);
    
    枚举窗口消息{
    WM_SETCURSOR=0x0020,
    WM_MOUSEMOVE=0x0200,
    ....
    }
    枚举HitTestCodes{
    HTCLIENT=1,
    ....
    }
    ....
    IntPtr hWnd=[如何获得窗口句柄]
    
    int lParam=((int)WindowMessages.WM_MOUSEMOVE)哪个C#SendMessage函数?说明完整的.Net类。没关系,我会发布我使用的内容,但如果有人发布不同的解决方案,我可以轻松更改。考虑到最新的编辑,这里还有问题吗?如果是的话,那是什么?谢谢你踩下刹车,这很有帮助。这个游戏是用java编写的。当我按t(调出信息区)时,它会给出上面的信息。但是当我打字的时候,我什么也得不到。这可能是通过java运行时进行的吗?我不知道这是否与java运行时有关。在Windows上,发送假键盘和鼠标输入不是一个可靠的过程。我唯一能建议的是在调用SendKeys之前确保正确的窗口具有焦点-因为输入总是发送到焦点窗口。我修改了我的帖子,我看到的是错误的过程,如果你能解释该消息,我将非常感谢。您可以通过搜索WM_输入和WM_键控消息ID来解码消息的含义。接收WM_输入可能意味着它使用原始输入,这就是SendKeys不工作的原因。在任何情况下,您都无法(可靠地)通过窗口消息发送按键:
    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);