Du solltest dich nicht darauf verlassen wie oft es ausgelöst wird. Bei mir wurde es teilweise sogar 3 mal ausgelöst. Schau dir am besten die Hilfe zu SetWindowsHookEx und wh_keyboard an damit du weißt worauf du dich verlassen kannst und was nur glück/zufall ist.
Der Grund für das von dir unerwartete Verhalten sollte der sein:
Zitat:
The KeyboardProc hook procedure is an application-defined or library-defined callback function used with the SetWindowsHookEx function. The system calls this function whenever an application calls the GetMessage or PeekMessage function and there is a keyboard message (WM_KEYUP or WM_KEYDOWN) to be processed.
[Edit]
Habs auch so eben probiert: Durch mehrere Aufrufe von PeekMessage mit PM_NOREMOVE wird die Hookprocedure immer wieder aufgerufen (so wie in der Hilfe beschrieben
[/Edit]