Mit deiner Variante wird aber kein Fehler angezeigt, also muss es ja eigentlich an der KeyboardHookProc Funktion liegen.
Wenn du immer True zurückgibst, egal ob es geklappt hat oder nicht, wie soll dann jemals ein Fehler angezeigt werden?
Das Problem ist hier ganz einfach:
Du benutzt WH_KEYBOARD statt WH_KEYBOARD_LL. Damit würdest du die Daten, die per WM_KEYDOWN und WM_KEYUP weitergegeben werden sollen abfangen. Da das aber im Fenstermanager passiert, brauchst du dafür in der Tat eine
DLL. Du willst aber die direkten Tastatureingaben. Und dafür brauchst du einen LowLevel-Hook. Der braucht auch keine
DLL.
Du musst also nur WH_KEYBOARD durch WH_KEYBOARD_LL ersetzen.