It is the way some programs such as Unikey, or IME do. If you want to capture all keypress of the system, you have to use hooking API. Besides you can also detect mouse events. When you use function to hook event, every mentioned events are sent to your own function. Then you forward events to the system if you want. Many others program may use these events. So it is better off forwarding all events you received. Please read MSDN for details. It is just I heard about that. I have never done it before.