I think you have two options to do this.
One is using a timer with the interval set to a small value, and use the GetAsyncKeyState api function. Search this forum and I'm sure you can find some samples.
The other is by using a system wide hook. Unfortunately most system wide hooks have to be located in a C dll. The only one available to vb is a Journalrecord hook. This hook type is used to record macro's. I posted an example for catching mouse move events in this thread:

http://forums.vb-world.net/showthrea...threadid=15494

I think if you dive a bit deeper in the WM_KEYDOWN (&H100) messages, you could rewrite it for catching keyboard events.