Dobrý den, zde bude potřeba využít API funkce. V jedné aplikaci jsem řešil stejný problém a vyřešil jsem ho s pomocí googlu takto: Deklarace API a vytvoření funkce, která bude systému posílat zprávu o stisku tlačítka:
Imports System.Runtime.InteropServices
Module api
Sub New()
End Sub
Public Const INPUT_KEYBOARD As Integer = 1
Public Const KEYEVENTF_KEYUP As UInteger = &H2
<DllImport("user32.dll", SetLastError:=True)> _
Public Function SendInput(ByVal nInputs As UInteger, ByVal pInputs As Input_32bitSyst(), ByVal cbSize As Integer) As UInteger
End Function
<DllImport("user32.dll", SetLastError:=True)> _
Public Function SendInput(ByVal nInputs As UInteger, ByVal pInputs As Input_64bitSyst(), ByVal cbSize As Integer) As UInteger
End Function
<StructLayout(LayoutKind.Explicit)> _
Public Structure Input_32bitSyst
<FieldOffset(0)> _
Public type As Integer
<FieldOffset(4)> _
Public ki As KeyboardInput_32bitSyst
End Structure
<StructLayout(LayoutKind.Sequential, Size:=24)> _
Public Structure KeyboardInput_32bitSyst
Public wVk As UShort
Public wScan As UShort
Public dwFlags As UInteger
Public time As UInteger
Public dwExtraInfo As IntPtr
End Structure
<StructLayout(LayoutKind.Explicit)> _
Public Structure Input_64bitSyst
<FieldOffset(0)> _
Public type As Integer
<FieldOffset(8)> _
Public ki As KeyboardInput_64bitSyst
End Structure
<StructLayout(LayoutKind.Sequential, Size:=28)> _
Public Structure KeyboardInput_64bitSyst
Public wVk As UShort
Public wScan As UShort
Public dwFlags As UInteger
Public time As UInteger
Public dwExtraInfo As IntPtr
End Structure
End Module
Public Module KeyboardSimulation
Sub New()
End Sub
Public Sub Simulate(ByVal ParamArray keys As UShort())
If IntPtr.Size = 4 Then
Dim input As api.Input_32bitSyst() = New api.Input_32bitSyst(keys.Length - 1) {} '32 bitová verze
'pole kódů kláves
For i As Integer = 0 To keys.Length - 1
input(i).type = api.INPUT_KEYBOARD 'stisknutí
input(i).ki.wVk = keys(i) 'konkrétní klávesa
Next
api.SendInput(3, input, Marshal.SizeOf(GetType(api.Input_32bitSyst))) 'odeslat zprávu o stisknutí všech kláves v poli
For i As Integer = 0 To keys.Length - 1
input(i).ki.dwFlags = api.KEYEVENTF_KEYUP 'zvednutí klávesy
Next
api.SendInput(3, input, Marshal.SizeOf(GetType(api.Input_32bitSyst))) 'odeslat zprávu o zvednutí všech kláves v poli
Else
'64 bitová verze
Dim input As api.Input_64bitSyst() = New api.Input_64bitSyst(keys.Length - 1) {}
'pole kódů kláves
For i As Integer = 0 To keys.Length - 1
input(i).type = api.INPUT_KEYBOARD
'jde o stisknutí
'o kterou klávesu se jedná
input(i).ki.wVk = keys(i)
Next
api.SendInput(3, input, Marshal.SizeOf(GetType(api.Input_64bitSyst)))
'odešleme zprávu o stisknutí všech kláves v poli
For i As Integer = 0 To keys.Length - 1
'jde o zvednutí klávesy
input(i).ki.dwFlags = api.KEYEVENTF_KEYUP
Next
'odešleme zprávu o zvednutí všech kláves v poli
api.SendInput(3, input, Marshal.SizeOf(GetType(api.Input_64bitSyst)))
End If
End Sub
End Module
A takto funkci volám:
'odeslat funkci key code klávesy, jejíž stisk se má simulovat
KeyboardSimulation.Simulate(e.KeyCode) 'zaslání hodnoty k vypsání
|