Ho trovato questo:

codice:
Public Declare Function GetKeyState Lib "user32.dll" (ByVal nVirtKey As Long) As Integer

Private Sub Timer1_Timer()
    Dim keystate As Integer
    keystate = GetKeyState(vbKeyQ)

    If keystate And &H8000 Then
        MsgBox "premuto"
    End If
End Sub
In effetti funziona, io ogni istante controllo se il pulsante q (in questo caso) è stato premuto, e se si fa una msgbox.
Il problema è: siccome l'ho messo dentro l'evento di un oggetto timer che viene generato ogni millisecondo, le prestazioni secondo voi sono ottimali? ci sono metodi più furbi?