Вы можете зарегистрироваться для получения необработанных входных сообщений через RegisterRawInputDevices . Взгляните здесь , в принятом ответе RRUZ есть несколько ссылок, одна из которых указывает на реализацию C #. Это работает с оконными сообщениями, без зацепок.
(С помощью этого метода вы также получаете информацию о конкретном устройстве, с которого поступил ввод, так что вы можете различать несколько клавиатур. Именно здесь большинство вопросов, имеющих «использовать RegisterRawInputDevices», как заголовок ответа. Но вы также можете использовать его, чтобы просто захватить ввод, не заботясь об источнике.)