我正在为一个非由我制作的游戏开发客户端加载程序。我已经建立了一个鼠标和关键事件库,可以发送给客户端,它们大部分都可以工作。但是,有一点我似乎无法弄清楚。
我将代码的输入部分设为:
[DllImport("user32.dll")]
public static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, uint wParam, uint lParam);
//Send each character of string one at a time
foreach(Char c in Input)
PostMessage(mainwnd, (uint)WM.CHAR, c, 1);
//Send final enter key to send message in game
PostMessage(mainwnd, (uint)WM.CHAR, 0x0D, 1);
这很好用,但有两件事没有考虑。
我尝试了PostMessage(mainwnd, (uint)WM.CHAR, 0x0D, 1);
之类的东西来发送开始输入密钥,但游戏不会处理它。如果我使用PostMessage尝试打开菜单,也会发生同样的事情。除非在发送消息之前聊天窗口已经打开,否则不会解析任何内容。
我想我使用的是错误的WM_Message,但我找不到我需要的那个。我试过了:
也许还有其他几个,但没有运气。有谁知道哪个命令可能有效?
答案 0 :(得分:4)
你必须幸运才能工作。键盘输入不仅仅是一条消息。它还影响(以及其他)GetKeyboardState
和GetAsyncKeyState
- 并且用这些模拟输入是非平凡的。如果键盘焦点在其他地方,它可能搞砸了。
您可以尝试发布WM_KEYDOWN
和WM_KEYUP
来生成略低级别的消息。
低级仍为SendInput
,模拟键盘驱动程序的输入。键盘焦点必须位于正确的位置,否则会将输入发送到错误的窗口。
答案 1 :(得分:0)
尝试WM_KEYDOWN,然后是WM_KEYUP。使用VK_ENTER代码(我认为)。