Code:
Imports System.Runtime.InteropServices
Public Class Form1
Private WithEvents bNum, bCaps, bScroll As New Button
Sub New()
InitializeComponent()
bNum = New Button
bNum.Location = New Point(10, 40)
bNum.Text = "NumLock"
bCaps = New Button
bCaps.Location = New Point(10, 65)
bCaps.Text = "CapsLock"
bScroll = New Button
bScroll.Location = New Point(10, 90)
bScroll.Text = "ScrollLock"
Me.Controls.Add(bNum)
Me.Controls.Add(bCaps)
Me.Controls.Add(bScroll)
End Sub
Private Sub DoKeyBoard(ByVal flags As NativeMethods.KEYEVENTF, ByVal key As Keys)
Dim input As New NativeMethods.INPUT
input.dwType = NativeMethods.InputType.Keyboard
input.wVk = Convert.ToInt16(key)
input.wScan = 0
input.time = 0
input.dwFlags = flags
input.dwExtraInfo = IntPtr.Zero
Dim cbSize As Integer = Marshal.SizeOf(GetType(NativeMethods.INPUT))
Dim result As Integer = NativeMethods.SendInput(1, input, cbSize)
If result = 0 Then Debug.WriteLine(Marshal.GetLastWin32Error)
End Sub
Private Sub bNum_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bNum.Click
DoKeyBoard(0, Keys.NumLock)
DoKeyBoard(NativeMethods.KEYEVENTF.KEYUP, Keys.NumLock)
End Sub
Private Sub bCaps_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bCaps.Click
DoKeyBoard(0, Keys.CapsLock)
DoKeyBoard(NativeMethods.KEYEVENTF.KEYUP, Keys.CapsLock)
End Sub
Private Sub bScroll_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bScroll.Click
DoKeyBoard(0, Keys.Scroll)
DoKeyBoard(NativeMethods.KEYEVENTF.KEYUP, Keys.Scroll)
End Sub
End Class
Public Class NativeMethods
<DllImport("user32.dll", SetLastError:=True)> Friend Shared Function SendInput(ByVal cInputs As Int32, ByRef pInputs As INPUT, ByVal cbSize As Int32) As Int32
End Function
<StructLayout(LayoutKind.Sequential, pack:=1, Size:=28)> Friend Structure INPUT
Public dwType As InputType
Public wVk As Int16
Public wScan As Int16
Public dwFlags As KEYEVENTF
Public time As Int32
Public dwExtraInfo As IntPtr
End Structure
Friend Enum InputType As Integer
Mouse = 0
Keyboard = 1
Hardware = 2
End Enum
<Flags()> _
Friend Enum KEYEVENTF As Integer
EXTENDEDKEY = 1
KEYUP = 2
UNICODE = 4
SCANCODE = 8
End Enum
End Class