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