This is the madRemote section of the forum, I think you want to visit the madCodeHook area. Anyhow, do you mean hook in your own process executable? If this is the case madCodeHook.HookAPI() and madCodeHook.HookCode() is all you need.
In the NT family doing API hooking only ever affects the current process. But if the user e.g. uses the task manager to terminate your application then TerminateProcess is called in the context of the task manager and NOT in the context of your process. So in order to stop the user from doing that you'd need to hook the TerminateProcess API in the context of the task manager. Now it's theoretically possible to do this without using a dll, but it'd be difficult as hell. So you better stop thinking about realizing this without using a dll.
By the way, you can have many global hooks, not just one. The biggest consideration is that the hook code needs to be very fast/efficient because it is getting control for every keystrok