It's more eficient IMO. With GetAsyncKeystate you check if a key is down or up, then you execute a piece of code. With RegisterHotkey you set a system wide hotkey. Then whenever that key is pressed, it sends a WM_HOTKEY to the application specified in the hwnd param for further handling. Instead of looping forever like with GAK.