Salve a tutti.
Sto cercando di usare la funzione API sendinput per simulare la pressione di un tasto della tastiera. Il mio obiettivo è quello di creare delle macro, che ad esempio alla pressione del tasto "R", avvenga in automatico la pressione del tasto 1 (per esempio)... Ho già la parte di codice che riguarda l'hook di sistema, che intercetta il primo tasto.
La stessa funzione: muove anche il mouse e simula i click ma per la tastiera proprio non..
Vi posto il mio codice:
codice:
Private Declare Function SendInput Lib "user32" (ByVal nInputs As Integer, ByVal pInputs As INPUT, ByVal cbSize As Integer) As Integer
Private Structure KEYBDINPUT
'Public dwtype as Integer
Public wVk As Integer
Public wScan As Integer
Public dwFlags As Integer
Public time As Integer
Public dwExtraInfo As IntPtr
End Structure
'<StructLayout(LayoutKind.Explicit)> _
Private Structure INPUT
'<FieldOffset(0)> _
Public type As Integer
' <FieldOffset(4)> _
Public mi As MOUSEINPUT
' <FieldOffset(4)> _
Public ki As KEYBDINPUT
' <FieldOffset(4)> _
Public hi As HARDWAREINPUT
End Structure
Sub InvioTasto
Dim inputE As New INPUT
inpute.ki.dwExtraInfo = 0
inputE.type = 1 'input tastiera
InputE.ki.dwFlags = 0 'pressione del tasto
inputE.ki.wVk= 66 'tasto a caso
'inputE.dwExtraInfo = intptr.zero
Dim cbSize As Integer = Marshal.SizeOf(gettype(INPUT))
Dim result As Integer = SendInput(1, inputE, cbSize) 'invio pressione tasto
Dim lasterror As Integer = Marshal.GetLastWin32Error
Debug.WriteLine("LastError: " & lasterror)
InputE.ki.dwFlags =2 'rilascio del tasto
cbSize = Marshal.SizeOf(gettype(INPUT))
result = SendInput(1, inputE, cbSize) 'inviio rilascio tasto
lasterror = Marshal.GetLastWin32Error
Debug.WriteLine("LastError: " & lasterror)
End Sub
Mi da ogni volta error 87.
Ho letto tutti gli esempi di questo mondo ma sono quasi tutti o in c++ o per Visual Basic 6.
Io uso VB.NET, Win XP pro sp3.
VI prego datemi qualche dritta.
Grazie