1

我正在为不是我制作的游戏开发客户端加载器。我已经构建了一个鼠标和按键事件库以发送给客户端,它们在大多数情况下都可以工作。但是,有一点我似乎无法弄清楚。

我将代码的输入部分设为:

[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);

这很好用,但有两件事没有考虑到。

  1. 在游戏中,您需要在输入前按回车键才能打开聊天
  2. 有热键可以打开菜单

我尝试过PostMessage(mainwnd, (uint)WM.CHAR, 0x0D, 1);发送开始输入键之类的方法,但游戏不处理它。如果我使用 PostMessage 尝试打开菜单,也会发生同样的事情。除非在发送消息之前聊天窗口已经打开,否则不会解析任何内容。

我想我使用了错误的 WM_Message,但我找不到我需要的那个。我努力了:

  1. WM_CHAR
  2. WM_SYSCHAR
  3. WM_MENUCHAR
  4. WM_HOTKEY
  5. WM_APPCOMMAND
  6. WM_KEYDOWN 后跟 WM_KEYUP

也许还有其他几个,但没有运气。有谁知道哪个命令可能有效?

4

2 回答 2

4

你必须很幸运才能让它发挥作用。键盘输入不仅仅是一条信息。它还会影响(除其他外)GetKeyboardState并且GetAsyncKeyState- 用这些来模拟输入并非易事。如果键盘焦点在其他地方,它可能会搞砸。

您可以尝试发布WM_KEYDOWNWM_KEYUP生成稍低级别的消息。

低级仍然是SendInput模拟来自键盘驱动程序的输入。键盘焦点必须在正确的位置,否则会将输入发送到错误的窗口。

于 2011-12-28T01:44:13.487 回答
0

尝试 WM_KEYDOWN,然后是 WM_KEYUP。使用 VK_ENTER 代码(我认为)。

于 2011-12-28T01:42:00.823 回答