When I was writing a Menu "commandbar" some years ago for Visual Basic 6 (the details aren't important, but it basically rehosted the menu on a toolbar control, similar to IE4). One of the troubles was that pressing left and right wouldn't always work properly since the toolbar didn't have menu-like keyboard navigation. Anyway, the end result was that I needed to deal with those keys myself. I believe my original attempts used GetAsyncKeyState() but it proved unreliable, which was why I resorted to using a Windows Hook. I don't remember the specifics of what "unreliable" was but it was enough to force me to look for other alternatives.
With the GetAsyncKeyState method you would probably need to make sure to set a flag, otherwise you'll fire the "hotkey" event every single iteration when you check it; additionally, you're somewhat limited by the rate at which it iterates. (it should work however, since GetAsyncKeyState returns whether the key is currently pressed as well as if it was pressed since the last call).
My own problem with this approach is it is polling constantly; whether that matters I suppose depends on what you want to use it for.