Варианты:
1. Можно поставить глобальный хук (должен быть реализован в dll, в exe глобальные не работают), при регистрации хука такая dll будет вгружаться во все процессы рабочего стола.
2. Посмотреть в сторону RIT (
Raw Input Thread). На практике ни разу не пробовал.
3. Найти или написать драйвер фильтра клавиатуры (что гораздо сложнее). В отличие от первых 2-х вариантов, работающих в user mode, будет работать в kernel mode.