У меня есть приложение C #, которое отправляет в игру события клавиатуры и мыши. В игре есть небольшая часть пользовательского интерфейса, которая может меняться в зависимости от того, что мы хотим видеть (например, карта GPS, различные действия и т. Д.). Иногда в этой части пользовательского интерфейса нам нужно нажать «Enter» (или другую клавишу в зависимости от того, как пользователь настроил ключи игры), чтобы что-то активировать (например, нажать Enter, чтобы активировать службу спасения).
Теперь проблема: все ключевые события, отправленные из приложения C #, обрабатываются ВНЕ этого пользовательского интерфейса, кроме этой вещи «активировать». Сначала я подумал, что есть проблема с событием клавиши «ENTER» (возврат), но после преобразования его на другую клавишу, которая работала в игре, я заметил, что эта клавиша также игнорируется.
Я не уверен, что это проблема, связанная с тем, как я отправляю сообщения (возможно, для этого нужен определенный параметр), и ее можно исправить, изменив мое приложение, или это какая-то блокировка в игре - и в этом случае ничего нет Я могу сделать.
Вот код, который я использую для отправки ключевых событий:
public static void PressKey(short key)
{
INPUT[] inputs = new INPUT[]
{
new INPUT
{
type = INPUT_KEYBOARD,
u = new InputUnion
{
ki = new KEYBDINPUT
{
wVk = (ushort)0,
wScan = (ushort)key,
dwFlags = KEYEVENTF_SCANCODE,
dwExtraInfo = IntPtr.Zero,
}
}
},
new INPUT
{
type = INPUT_KEYBOARD,
u = new InputUnion
{
ki = new KEYBDINPUT
{
wVk = (ushort)0,
wScan = (ushort)key,
dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP,
dwExtraInfo = GetMessageExtraInfo(),
}
}
}
};
SendInput((uint)inputs.Length, inputs, Marshal.SizeOf(typeof(INPUT)));
}
Но, надеясь, что это 1-й случай, я был бы признателен за любую помощь с этим.
Добавлен снимок экрана, чтобы попытаться лучше объяснить проблему
- (A) -> Это окно пользовательского интерфейса, которое требует нажатия клавиши «ENTER». Предположим, я изменил настройки игры, чтобы вместо «Enter» для действия АКТИВИРОВАТЬ была буква «E». Затем текст «Служба помощи при вызове (ENTER)» теперь будет отображать «Служба помощи при вызове (E)». По умолчанию клавиша «E» - это запуск двигателя в игре. И работает отлично (в случае (B)). Как только я изменяю E на «Активировать», он полностью игнорируется.
- Еще один момент, который может (а может и не иметь) иметь значение, заключается в том, что F-клавиши, которые могут находиться в нижней части окна пользовательского интерфейса, также РАБОТАЮТ нормально. Надеюсь, это немного проясняет ситуацию.