投稿者 もちだ  (社会人) 投稿日時 2011/3/28 08:46:03
http://msdn.microsoft.com/ja-jp/library/cc720817.aspx
検索した感じでは、MSDNのこちらが参考になるかと思います。
NumLock等の状態を確認し、切り替えるサンプルコードも示されています。
VB2005ですが…2008でも動くのではかなろうかと。

MSDNのサンプルから、NumLockだけを抜き出してみました。CheckBox1だけ配置してくださいませ。
流用すれば自動で切り替えることも出来るでしょう(勝手に切り替えるのが良いかは別として)。

Public Class Form1
    Friend Class NativeMethods
        Public Const VK_NUMLOCK As Integer = &H90
        Friend Const KEYEVENTF_KEYUP As Integer = &H2

        Private Sub New()
        End Sub

        <System.Runtime.InteropServices.DllImport("user32.dll")> _
         Friend Shared Sub keybd_event(ByVal bVirtualKey As ByteByVal bScanCode As ByteByVal dwFlags As IntegerByVal dwExtraInfo As Integer)
        End Sub
    End Class

    Private Sub CheckBox1_CheckedChanged(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
        If CheckBox1.CheckState = CheckState.Checked Then
            SetKeybdStatus(True)
        Else
            SetKeybdStatus(False)
        End If
    End Sub

    Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load
        If CheckBox1.Checked <> Control.IsKeyLocked(Keys.NumLock) Then
            CheckBox1.Checked = Control.IsKeyLocked(Keys.NumLock)
        End If
    End Sub

    Private Sub SetKeybdStatus(ByVal bOnOffFlag As Boolean)
        If Control.IsKeyLocked(Keys.NumLock) <> bOnOffFlag Then
            NativeMethods.keybd_event(NativeMethods.VK_NUMLOCK, &H45, 0, 0)
            NativeMethods.keybd_event(NativeMethods.VK_NUMLOCK, &H45, NativeMethods.KEYEVENTF_KEYUP, 0)
        End If
    End Sub
End Class