Yes Lord (muffled laughter), you should do that and enlighten us.

Here's another 2 cents worth for Bios.
Code:
Option Explicit

Private Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" ( _
 ByVal lpPrevWndFunc As Long, _
 ByVal hwnd As Long, _
 ByVal Msg As Long, _
 ByVal wParam As Long, _
 ByVal lParam As Long) As Long

Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" ( _
 ByVal hwnd As Long, _
 ByVal nIndex As Long, _
 ByVal dwNewLong As Long) As Long

Private Const GWL_WNDPROC = -4
Private Const WM_KEYDOWN = &H100
Private Const WM_KEYUP = &H101


Private hControl As Long
Private lPrevWndProc As Long
Private ArrPos As Long

Public KeyArray(10000) As Byte

'*************************************************************
'WindowProc
'*************************************************************
Private Function WindowProc(ByVal lWnd As Long, ByVal lMsg As Long, _
 ByVal wParam As Long, ByVal lParam As Long) As Long

Select Case lMsg
 
 Case WM_KEYDOWN
  KeyArray(ArrPos) = CByte(wParam)
  ArrPos = ArrPos + 1
  
 Case WM_KEYUP
  'Code for 'key up' event
  
End Select

 WindowProc = CallWindowProc(lPrevWndProc, lWnd, lMsg, wParam, lParam)

End Function
'***********************************************************


Public Sub Hook(ByVal hControl_ As Long)
 
 hControl = hControl_
 lPrevWndProc = SetWindowLong(hControl, GWL_WNDPROC, AddressOf WindowProc)

End Sub

Public Sub Unhook()
 
 Call SetWindowLong(hControl, GWL_WNDPROC, lPrevWndProc)

End Sub