Some hooks are done as messages without loading the DLL in the target
process. If you want your 32 bit app to hook 64 bit apps, you can make a
64-Bit COM DLL and call it out of process. In this case, Windows would use
dllhost.exe to host the 64-Bit DLL, which would install the hook. I already
done that. A better solution is to make a 64-Bit version of your app. If
it's in C++, then not much changed in 64-Bit. int/long are still 32 bits,
but pointer size changed. In my case, the main app was a VB6 app, which is
32-Bit, and doesn't have a 64-Bit compiler.
I know that low-level keyboard hooks do run in the process that called
SetWindowsHookEx. Maybe normal keyboard hooks do too.
BTW, there are 32-bit versions of Notepad and Wordpad even on 64-bit
systems.