This is an old post I made for VB 6 but I think it still holds true for C# RegisterShellHook