Déplacement souris [Résolu]

Signaler
Messages postés
53
Date d'inscription
vendredi 6 octobre 2006
Statut
Membre
Dernière intervention
7 octobre 2009
-
Messages postés
9
Date d'inscription
jeudi 20 novembre 2008
Statut
Membre
Dernière intervention
9 décembre 2008
-
Bonjour à tous!! J'aimerais savoir comment pourrait-on simuler le déplacement de la souris mais pour une autre application(autre que windows).Voir est-ce réalisable genre pour dans un jeu?? Si oui, y aurrait-il une source ou tuto sur vbfrance ou je pourrais être référé?

Voilà merci à tous!!

11 réponses

Messages postés
9
Date d'inscription
jeudi 20 novembre 2008
Statut
Membre
Dernière intervention
9 décembre 2008

Salut en fait je suis sur ce probleme, j'avais réussi à faire un setcursorpos qui marchait dans certains jeux mais qui ne marchait pas dans les jeux sous vista, puis en le lançant en mode adminstrateur il s'est mis à marcher... Maintenant le problème se pose dans les nouveaux jeux, peut être qu'il faut essayer avec un sendinput, mais je n'arrive pas à trouver des exemples concrets et simple. je vais poster à ce sujet.
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
salut,

tu peux déplacer la souris avec l'API SetCursorPos
++


Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
Messages postés
53
Date d'inscription
vendredi 6 octobre 2006
Statut
Membre
Dernière intervention
7 octobre 2009

oui je savais deja mais ca ne marche pas dans un jeu,juste les applis. a moins que tu ais une méthode qui marcherais.


Merci!
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
peut-être directement en directx ou opengl mais je n'ai jamais essayé....
regarde les jeux existants dans les sources déposés et vois ce que çà donne... ?
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
4
Bonsoir,

Ben...
SetCursorPos sert à définir les coordonnées du curseur par rapport à l'angle supérieur gauche de l'écran.
 Je ne voius donc pas où est le problème...
Maintenant : si tu cherches ensuite à transposer ces coordonnées par rapport à l'angle supérieur gauche de ta fenêtre de jeu (notamment avec une fenêtre Directx), c'est une autre affaire, dans laquelle SetCursorPos ne semble pas avoir à y avoir directement quoi que ce soit !
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
4
Tout ce dont tu parles maintenant n'a plus rien à voir avec :
J'aimerais savoir comment pourrait-on simuler le déplacement de la souris
Tu en es tout simplement à t'intéresser au déclenchement d'une action, à un endroit précis d'une autre appli ...
Je doute que tu puisses y parvenir avec un jeu en Directx ...
Messages postés
53
Date d'inscription
vendredi 6 octobre 2006
Statut
Membre
Dernière intervention
7 octobre 2009

Resalut!! Merci francis0403!! en effet sendinput fonctionne mais par contre pourrais tu m'en dire plus sur cet api? Car j'essaie de faire bouger ma soiris mais les coordonnées sont pas celles que je voudrais.Mon code est comme suit:
Option Explicit




Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)





Private Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As INPUT_TYPE, ByVal cbSize As Long) As Long





Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long





'Les bouton de la souris
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer





Private Type POINTAPI
    X As Long
    Y As Long
End Type





Private Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_LEFTUP = &H4
Private Const MOUSEEVENTF_MIDDLEDOWN = &H20
Private Const MOUSEEVENTF_MIDDLEUP = &H40
Private Const MOUSEEVENTF_RIGHTDOWN = &H8
Private Const MOUSEEVENTF_RIGHTUP = &H10
Private Const MOUSEEVENTF_MOVE = &H1
Private Const MOUSEEVENTF_ABSOLUTE = &H8000
Private Const INPUT_MOUSE = 0
Private Const INPUT_KEYBOARD = 1
Private Const INPUT_HARDWARE = 2





Type MOUSEINPUT
  dx As Long
  dy As Long
  mouseData As Long
  dwFlags As Long
  dwtime As Long
  dwExtraInfo As Long
End Type





Type INPUT_TYPE
  dwType As Long
  xi(0 To 23) As Byte
End Type





Dim Click
Dim ClickGauche As Integer
Dim ClickDroit As Integer
Dim ClickMilieu As Integer





Public Left_Click As Boolean
Public Right_Click As Boolean
Public OPX As Long
Public OPY As Long
Public Mouse_PosX As Integer
Public Mouse_PosY As Integer







Public Sub Move_Mouse()
   
    Dim pos As POINTAPI
    Dim intX As Integer
    Dim inputEvents(0 To 1) As INPUT_TYPE ' holds information about each event
    Dim mouseEvent As MOUSEINPUT ' temporarily hold mouse input info
   
   
   
    ' Load the information needed to synthesize pressing the left mouse button.
    mouseEvent.dx = 512 ' center mouse x
    mouseEvent.dy = 384 ' center mouse y
    mouseEvent.mouseData = 0 
    mouseEvent.dwFlags = MOUSEEVENTF_MOVE ' move mouse
    mouseEvent.dwtime = 0 ' use the default
    mouseEvent.dwExtraInfo = 0 
    ' Copy the structure into the input array's buffer.
    inputEvents(0).dwType = INPUT_MOUSE ' mouse input
    CopyMemory inputEvents(0).xi(0), mouseEvent, Len(mouseEvent)
   
    ' Now that all the information for the 2 input events has been placed
    ' into the array, finally send it into the input stream.
    intX = SendInput(2, inputEvents(0), Len(inputEvents(0))) ' place the events into the stream





End Sub



Voilà je veux faire en sorte que la souris se positionne au centre de mon écran(1024/768)
Merci!!
Messages postés
9
Date d'inscription
jeudi 20 novembre 2008
Statut
Membre
Dernière intervention
9 décembre 2008

Salut, vraiment je suis désolé mais je n'y connais pas grand chose, et tu m'apprends finalement l'utilisation du sendInput parce que je n'y comprenais rien et je n'arrivais pas à trouver comment ça marchait... Ceci tu "dim pos as pointapi" mais je n'ai pas l'impression que tu t'en sois servi de ce pos ? Si tu trouves dis moi, parce que je tenais vraiment à pouvoir utiliser cet api, même si c'est une infime partie du programme que je veux faire.

Merci !!
Messages postés
53
Date d'inscription
vendredi 6 octobre 2006
Statut
Membre
Dernière intervention
7 octobre 2009

J'ai trouvé,voila pour faire bouger la souris à x=512 y=384:

Mes apis:

Option Explicit



Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)



Private Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As INPUT_TYPE, ByVal cbSize As Long) As Long






Mes constantes:
Private Const MOUSEEVENTF_ABSOLUTE = &H8000 ' absolute move 32768
Private Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down 2
Private Const MOUSEEVENTF_LEFTUP = &H4 ' left button up 4
Private Const MOUSEEVENTF_MIDDLEDOWN = &H20 ' middle button down 32
Private Const MOUSEEVENTF_MIDDLEUP = &H40 ' middle button up 64
Private Const MOUSEEVENTF_MOVE = &H1 ' mouse move 1
Private Const MOUSEEVENTF_RIGHTDOWN = &H8 ' right button down 8
Private Const MOUSEEVENTF_RIGHTUP = &H10 ' right button up 16



Private Const INPUT_MOUSE = 0
Private Const INPUT_KEYBOARD = 1
Private Const INPUT_HARDWARE = 2






Mes type:


Type MOUSEINPUT
  dx As Long
  dy As Long
  mouseData As Long
  dwFlags As Long
  dwtime As Long
  dwExtraInfo As Long
End Type



Type INPUT_TYPE
  dwType As Long
  xi(0 To 23) As Byte
End Type



Et ici dans ma procédure(ex:. Form_Load):



Dim intX As Integer
Dim inputevents(0 To 1) As INPUT_TYPE ' holds information about each event
Dim mouseevent As MOUSEINPUT ' temporarily hold mouse input info


Dim DestX as Long , DestY as Long



DestX = 512
DestY = 384
DestX = DestX * 65535 / Screen.Width * Screen.TwipsPerPixelX
DestY = DestY * 65535 / Screen.Height * Screen.TwipsPerPixelY


Load the information needed to synthesize pressing the left mouse button.
    mouseevent.dx = DestX    
    mouseevent.dy = DestY    mouseevent.mouseData = 0 ' not needed
    mouseevent.dwFlags = MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_MOVE   ' move mouse
    mouseevent.dwtime = 0 ' use the default
    mouseevent.dwExtraInfo = 0  ' not needed
    ' Copy the structure into the input array's buffer.
    inputevents(0).dwType = INPUT_MOUSE ' mouse input
    CopyMemory inputevents(0).xi(0), mouseevent, Len(mouseevent)
   
    ' Now that all the information for the 2 input events has been placed
    ' into the array, finally send it into the input stream.
    intX = SendInput(2, inputevents(0), Len(inputevents(0))) ' place the events into the stream

Si t'as des questions ésite pas.
Messages postés
9
Date d'inscription
jeudi 20 novembre 2008
Statut
Membre
Dernière intervention
9 décembre 2008

trop cool merci Beaucoup :) c'est très gentil de ta part.
Messages postés
9
Date d'inscription
jeudi 20 novembre 2008
Statut
Membre
Dernière intervention
9 décembre 2008

au fait c'est une version vb6 je pense. ça tombe bien quelqu'un m'a demandé la version vb6.