cs_Alien
Messages postés70Date d'inscriptionmardi 4 juin 2002StatutMembreDernière intervention23 mars 2024
-
22 sept. 2022 à 23:02
cs_Alien
Messages postés70Date d'inscriptionmardi 4 juin 2002StatutMembreDernière intervention23 mars 2024
-
22 sept. 2022 à 23:49
Bonjour,
J'aimerais simuler les touches Clavier et souris à distance que j'envois via mes deux logiciels Client/Serveur.
Je le faisais avec keybd_event et mouse_event et maintenant j'essai de faire la même chose avec SendInput.
Malheureusement tous les exemples que je trouve sur le net ne fonctionne pas.
Quelqu'un pourrait me dire ce qui cloche sur mon code pour que cela fonction svp ?
J'ai testé plein de combinaison sans succès, je vous montre mes derniers en date.
Pour info voici ma Class.
Imports System.Runtime.InteropServices
Public Class SendInputs
#Region " Region Dlls & Déclaration"
<DllImport("user32.dll")>
Private Shared Function SendInput(
ByVal nInputs As Integer,
ByVal pInputs() As INPUT,
ByVal cbSize As Integer) As Integer
End Function
Private Const KeyDown As Integer = &H0
Private Const KeyUp As Integer = &H2
<StructLayout(LayoutKind.Explicit)>
Private Structure INPUT
'Field offset 32 bit machine 4
'64 bit machine 8
<FieldOffset(0)>
Public type As Integer
<FieldOffset(8)>
Public mi As MOUSEINPUT
<FieldOffset(8)>
Public ki As KEYBDINPUT
<FieldOffset(8)>
Public hi As HARDWAREINPUT
End Structure
Private Structure MOUSEINPUT
Public dx As Integer
Public dy As Integer
Public mouseData As Integer
Public dwFlags As Integer
Public time As Integer
Public dwExtraInfo As IntPtr
End Structure
Private Structure KEYBDINPUT
Public wVk As Short
Public wScan As Short
Public dwFlags As Integer
Public time As Integer
Public dwExtraInfo As IntPtr
End Structure
Private Structure HARDWAREINPUT
Public uMsg As Integer
Public wParamL As Short
Public wParamH As Short
End Structure
<Flags()>
Friend Enum InputType As Integer
Mouse = 0
Keyboard = 1
Hardware = 2
End Enum
<Flags()>
Friend Enum MOUSEEVENTF As Integer
MOVE = &H1
LEFTDOWN = &H2
LEFTUP = &H4
RIGHTDOWN = &H8
RIGHTUP = &H10
MIDDLEDOWN = &H20
MIDDLEUP = &H40
XDOWN = &H80
XUP = &H100
VIRTUALDESK = &H400
WHEEL = &H800
ABSOLUTE = &H8000
End Enum
<Flags()>
Public Enum KEYEVENTF As Integer
KEYDOWN = 0
EXTENDEDKEY = 1
KEYUP = 2
[UNICODE] = 4
SCANCODE = 8
End Enum
#End Region
#Region " Region Sub & Function"
Public Shared Sub SendKey(ByVal key As Char)
Dim Inpts(1) As INPUT
'key down
Inpts(0).type = InputType.Keyboard
Inpts(0).ki.wVk = Convert.ToInt16(CChar(key))
Inpts(0).ki.dwFlags = KEYEVENTF.KEYDOWN
Inpts(0).ki.time = 0
'key up
Inpts(1).type = InputType.Keyboard
Inpts(1).ki.wVk = Convert.ToInt16(CChar(key))
Inpts(1).ki.dwFlags = KEYEVENTF.KEYUP
Inpts(0).ki.time = 0
SendInput(Inpts.Count, Inpts, Marshal.SizeOf(GetType(INPUT)))
End Sub
Public Shared Sub SendKey2(ByVal key As Char)
Dim Inpts(0) As INPUT
Inpts(0).type = InputType.Keyboard
'Inpts(0).ki.wScan = KEYEVENTF.SCANCODE
Inpts(0).ki.wVk = Convert.ToInt16(CChar(key))
Inpts(0).ki.dwFlags = KEYEVENTF.KEYDOWN And KEYEVENTF.KEYUP 'And KEYEVENTF.SCANCODE
'Inpts(0).ki.time = 0
'Inpts(0).ki.dwExtraInfo = IntPtr.Zero
SendInput(Inpts.Count, Inpts, Marshal.SizeOf(GetType(INPUT)))
End Sub
#End Region
End Class
et voici l'appel.
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
SendInputs.SendKey("t")
End Sub
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button3.Click
SendInputs.SendKey2("t")
End Sub
cs_Alien
Messages postés70Date d'inscriptionmardi 4 juin 2002StatutMembreDernière intervention23 mars 2024 22 sept. 2022 à 23:43
Bon, désolé !
Je viens de trouver mon erreur, il faut juste savoir lire :p
'Field offset 32 bit machine 4
'64 bit machine 8
J'ai donc remplacé les 8 par des 4 ! et ça fonctionne pour la souris ! bon je dois encore trouver le param
pour quelle se déplace en absolue et pas en relatif.
Ensuite je vais m'intérreser au clavier
<StructLayout(LayoutKind.Explicit)>
Private Structure INPUT
'Field offset 32 bit machine 4
'64 bit machine 8
<FieldOffset(0)>
Public type As Integer
<FieldOffset(8)>
Public mi As MOUSEINPUT
<FieldOffset(8)>
Public ki As KEYBDINPUT
<FieldOffset(8)>
Public hi As HARDWAREINPUT
End Structure