Я работаю над загрузчиком клиента для игры, которую я не сделал. Я создал библиотеку мышей и ключевых событий для отправки клиенту, и они работают по большей части. Тем не менее, есть один бит, который я не могу понять.Какой WM_Message использовать?
Я сделал набрав часть моего кода это:
[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
А может быть, несколько других, но не повезло. Кто-нибудь знает, какая команда может работать?
SendInput кажется лучшим вариантом, но, глядя на параметры, он не принимает дескриптор окна. Причина, по которой мне нужен PostMessage, - это то, что я могу отправить данные, пока экран был свернут. Возможно, я читаю это неправильно, но SendInput, похоже, нуждается в полном фокусе экрана. – ozdrgnaDiies
Вы не понимаете; «Фокус» - это то, как работает ввод с клавиатуры. Только одно окно может принимать вводные сообщения клавиатуры за раз: окно с фокусом клавиатуры. Если вы пытаетесь отправить ввод с клавиатуры в нефокусированное окно, тогда вы играете в азартные игры, и в этом случае это звучит так, как будто вы проигрываете. – tenfour
Еще один способ объяснить, что ... если вы можете указать окно, вы не очень хорошо имитируете ввод с клавиатуры. Драйвер клавиатуры ничего не знает о дескрипторах окна. – tenfour