Global KeyBoardHook отменяет регистрацию события KeyPress - PullRequest
0 голосов
/ 28 мая 2018

У нас возникли проблемы с событием клавиатуры KeyPress.Он останавливается, когда событие нажатия клавиши заняло больше времени для завершения запроса.У нас есть поддержка KeyBoardHook, которая будет использоваться для захвата глобальных событий клавиатуры.Это тот же класс, что и в этом ответе SO .

Microsoft рекомендует, чтобы обратный вызов для перехвата клавиатуры был как можно более коротким, поскольку он фактически является частью обработчика прерываний.Если прерывание занимает слишком много времени, нарушающая часть цепочки обработчиков последовательно удаляется.Поскольку нам не сообщают, когда это произойдет, нет способа обнаружить это.Обработчик клавиатуры просто перестает работать.

private IntPtr HookCallback( int nCode, IntPtr wParam, IntPtr lParam )
{
    if (nCode >= 0)
    {
        int vkCode = Marshal.ReadInt32(lParam);
        int keyAction = wParam.ToInt32();

        EventHandlerKey( keyAction, vkCode );
    }

    return CallNextHookEx(hookId, nCode, wParam, lParam);
}

private void EventHandlerKey(int keyAction, int keyCode)
{
    // Some process which taking long time..!
}

Любое предлагаемое решение для решения проблемы?

...