Ciao...
Strano,il codice di Francesco funziona perfettamente,cmq in alternativa ti posto il codice

Vanno messi prima di ogni cosa,cioè prima della classe e di ogni sub

codice:
Imports System
Imports System.Runtime.InteropServices
Crei una nuova classe

codice:
Public Class Win32Bridge
    Public Sub New()
    End Sub
    <DllImport("User32.dll")> _
    Protected Shared Function GetKeyState(ByVal nVirtKey As Integer) As Short
    End Function
    Public Shared Function IsKeyOn(ByVal nKey As Integer) As Boolean
        Return ((GetKeyState(nKey) And 1) > 0)
    End Function
End Class
Qui inizia la classe del tuo form....
Dichiari la variabile per il tasto

codice:
Public Class Form1
    Private Const VK_CAPITAL As Integer = &H14
Crei una funzione,così da poterla richiamare facilmente

codice:
    Private Sub Capsl()

        If Win32Bridge.IsKeyOn(CType(VK_CAPITAL, Integer)) Then
            MsgBox("CapsLock")
        End If
    End Sub
Richiami la funzione dove vuoi,io in questo caso l'ho messa in "form load"

codice:
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Capsl()

    End Sub
ed Ecco fatto,se caps lock è attivo ti compare 1 messaggio...
Il codice non è mio,ma l'avevo trovato su internet...cmq funziona...

Ciao