<DllImport("user32.dll")> _
Private Function SendInput(ByVal cInputs As Integer, ByRef pInputs As INPUT, ByVal cbSize As Integer) As Integer
End Function
<StructLayout(LayoutKind.Explicit)> _
Private Structure INPUT
<FieldOffset(0)> Dim dwType As Integer
<FieldOffset(4)> Dim mouseInput As MOUSEINPUT
<FieldOffset(4)> Dim keyboardInput As KEYBDINPUT
<FieldOffset(4)> Dim hardwareInput As HARDWAREINPUT
End Structure
<StructLayout(LayoutKind.Explicit)> _
Private Structure KEYBDINPUT
<FieldOffset(0)> Public wVk As Short
<FieldOffset(2)> Public wScan As Short
<FieldOffset(4)> Public dwFlags As Integer
<FieldOffset(8)> Public time As Integer
<FieldOffset(12)> Public dwExtraInfo As IntPtr
End Structure
<Flags()> _
Friend Enum KEYEVENTF As Integer
EXTENDEDKEY = 1
KEYUP = 2
[UNICODE] = 4
SCANCODE = 8
End Enum
Public Function doKeyDown(ByVal key As Keys) As Integer
Dim flags As KEYEVENTF = 0
Return DoKey(flags, key)
End Function
Public Function doKeyUp(ByVal key As Keys) As Integer
Dim flags As KEYEVENTF = KEYEVENTF.KEYUP
Return DoKey(flags, key)
End Function
Private Function DoKey(ByVal flags As KEYEVENTF, ByVal key As Keys) As Integer
Dim input As New INPUT
Dim ki As New KEYBDINPUT
input.dwType = InputType.Keyboard
input.keyboardInput = ki
input.keyboardInput.wVk = Convert.ToInt16(key)
input.keyboardInput.wScan = 0
input.keyboardInput.time = 0
input.keyboardInput.dwFlags = flags
input.keyboardInput.dwExtraInfo = IntPtr.Zero
Dim cbSize As Integer = Marshal.SizeOf(GetType(INPUT))
Return SendInput(1, input, cbSize)
End Function