Я думаю, что нет никакого «легального» способа сделать это, потому что вы можете слушать события, происходящие в вашем окне, а не снаружи. Я был бы рад узнать, что я неправ, и есть «правильный» способ сделать это.
Я могу предложить вам хитрость (обходной путь). Создать прозрачное полноэкранное окно. Пользователь не видит его, но вы можете отследить все события, происходящие в его пределах. Каждый раз, когда вы ловите событие клавиатуры, сделайте следующее:
1. запомнить событие
2. закройте окно
3. Используйте класс Robot для воспроизведения события.
4. Восстановите прозрачное окно снова.
Я считаю, что компьютеры достаточно быстры, чтобы делать все это настолько быстро, что пользователи ничего не видят.