C# 发送从Spy++;
我正在尝试向游戏发送消息(自动执行文本命令),问题是我不知道如何使用spy++中的信息编写C#sendmessage函数 我能够使用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
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);