Я работаю над загрузчиком клиента для игры, не созданной мной. Я построил библиотеку событий мыши и клавиш для отправки клиенту, и они по большей части работают. Однако есть один бит, который я не могу понять.
Я сделал печатную часть своего кода следующим образом:
[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, но не могу найти, какой мне нужен. Я пробовал:
- WM_CHAR
- WM_SYSCHAR
- WM_MENUCHAR
- WM_HOTKEY
- WM_APPCOMMAND
- WM_KEYDOWN, за которым следует WM_KEYUP
И, может быть, несколько других, но не повезло. Кто-нибудь знает, какая команда может работать?