Чтобы решить эту проблему, я написал прослушиватель прокси-клавиатуры. Я использую LowLevelKeyboardProc для прослушивания клавиш клавиатуры.
Иногда это работало, а иногда нет. Когда я протестировал это, я понял, что последнее открытое приложение первым обнаруживает клавишу клавиатуры. Если другое приложение открывается первым, у меня нет проблем, потому что мое приложение открывается вторым. Однако, если другое приложение откроется позже, я не смогу обнаружить клавиши.
Я думаю, что другое приложение не позволяет продолжать перемещение клавиш. Отладил собственное приложение, открыв его несколько раз. Если я жду отладки кода в отладчике, движение клавиши не передается в приложения, открытые до меня.
Блок кода, который я жду в отладчике, выглядит следующим образом:
Код: Выделить всё
public IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam)
{
bool fEatKeyStroke = false;
var wparamTyped = wParam.ToInt32();
if (Enum.IsDefined(typeof(KeyboardState), wparamTyped))
{
object o = Marshal.PtrToStructure(lParam, typeof(LowLevelKeyboardInputEvent));
LowLevelKeyboardInputEvent p = (LowLevelKeyboardInputEvent)o;
var eventArguments = new GlobalKeyboardHookEventArgs(p, (KeyboardState)wparamTyped);
var key = (Keys)p.VirtualCode;
if (RegisteredKeys == null || RegisteredKeys.Contains(key))
{
EventHandler handler = KeyboardPressed;
handler?.Invoke(this, eventArguments);
fEatKeyStroke = eventArguments.Handled;
}
}
return fEatKeyStroke ? (IntPtr)1 : CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam);
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... er-problem
Мобильная версия