I've been trying to understand how hooking works and I found an excellent example:
http://www.vbforums.com/showthread.php?t=391338

This example works on a my 32 bit XP machine, but it does not work on my Vista Ultimate 64 bit machine. The example is supposed to hook notepad so that whenever I type a character in notepad, a text box recieves the same character. This works on XP, but on Vista 64, nothing happens.

I should probably say that when I first ported the example to Vista, I ran into 2 problems, which I think I correctly fixed.
1. I was getting a BadImageFormatException when the DLL was first trying to be accessed. I fixed this by setting the target platform in the VB project to be x86.

2. I was getting a DllNotFoundExeception, so I placed the "MainHook.dll" file in both:
C:\Windows\SysWOW64
C:\Windows\System32

I have a couple of theories, but I'm a bit of a beginner when it comes to hooking. Could this be happening because Notepad is a 64 bit application and the hook is written in 32 bit? I have the express version of VC++, so I can't create a dll targetted to 64 bit, so I haven't tried that. Any idea's?