begin process at 2012 02 16 05:47:54
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Divers

 > 

Débutants

 > 

SendInput


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

SendInput

vendredi 28 novembre 2008 à 04:31:24 | SendInput

sergiooi

Salut Tous!! J'aimerais avoir des infos sur l'api SendInput pour faire en sorte que losque je click sur le bouton droit de ma souris, la souris ne peux plus bouger tant que je n'aurrai pas reclicker sur le bouton droit de ma souris.
Pour faire cela, je dois pouvoir créer un mouvement de souris A UN ENDROIT PRÉCIS car j'ai remarqué que les coordonnées que j'ai entrer sont ajoutés au coordonnées actuelles de ma souris.

Ya ti quelqun qui peux m'aider??

Merci
vendredi 28 novembre 2008 à 07:27:12 | Re : SendInput

Renfield

Administrateur CodeS-SourceS
regarde la doc :

http://msdn.microsoft.com/en-us/library/ms646310.aspx

c'est moins hasardeux que de 'remarquer que'...

ca evite d'envoyer n'importe quel flag:
http://msdn.microsoft.com/en-us/library/ms646273(VS.85).aspx
dimanche 30 novembre 2008 à 04:59:35 | Re : SendInput

sergiooi

Salut Renfieldet les autres. Connais-tu cette fonction(sendinput) car je n'arrive pas a faire comme je le voudrais, cet à dire de faire bouger la souris au centre de mon écran(1024/768 pix)donc 512/384 non? voilà mon code:

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 Declare Function GetTickCount Lib "kernel32" () As Long

Private Declare Function GetLastError Lib "kernel32.dll" () As Long

Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" _
(ByVal Action As Long, _
ByVal Param1 As Long, _
ByVal Param2 As Any, _
ByVal MaJProfil As Long) As Long

 


Const SPI_SETMOUSESPEED = 113

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

Private Type POINTAPI
    X As Long
    Y As Long
End Type

'gets position and size of window relative to the parent
Declare Function GetWindowRect Lib "user32" _
(ByVal hWnd As Long, lpRect As RECT) As Long

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

'fonction "Pause"
Public Sub xWait(ByVal MilsecToWait As Long)
Dim lngEndingTime As Long

lngEndingTime = GetTickCount() + (MilsecToWait)
Do While GetTickCount() < lngEndingTime
 DoEvents
Loop
End Sub

Public Function Move_Mouse(XCoord As Long, YCoord As Long)
   
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 Speed As Long
       
Do Until Right_Click = False

Check_Mouse_State

    ' Load the information needed to synthesize pressing the left mouse button.
    mouseevent.dx = XCoords    
    mouseevent.dy = YCoords
    mouseevent.mouseData = 0 ' not needed
    mouseevent.dwFlags = MOUSEEVENTF_ABSOLUTE + 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
    
    DoEvents
    
   xWait 10
   
   Check_Mouse_State

Loop

End Function

Public Sub Check_Mouse_State()

Dim pos As POINTAPI

GetCursorPos pos

Form1.Caption = "X : " & pos.X & " /Y : " & pos.Y
   
'dit quelle boutton de la souris a été enfoncer

Click = GetAsyncKeyState(1)

If Click = -32767 Then
    
    Left_Click = True
   
    If Right_Click = True Then
   
        Right_Click = False
   
    End If
   
End If

Click = GetAsyncKeyState(2)

If Click = -32767 Then
    
    If Right_Click = False Then
   
        GetCursorPos pos
   
        Mouse_PosX = pos.X
   
        Mouse_PosY = pos.Y
   
        Right_Click = True
       
        Calculate_Coords
       
        Move_Mouse pos.X, pos.Y
            
    ElseIf Right_Click = True Then
       
        Right_Click = False
       
    End If
   
End If

Click = GetAsyncKeyState(vbMiddleButton)

If Click = -32767 Then
    

End If
   
End Sub

Pourrais-je avoir un tit exemple pour faire bouger ma souris avec sendinput?
je sais que c'est dans mon 'Move_Mouse' le probleme mais je n'y arrive pas...

Et surtout, merci à tous!

dimanche 30 novembre 2008 à 08:17:59 | Re : SendInput

Renfield

Administrateur CodeS-SourceS
plein de maladresses..

xWait a remplacer par l'API Sleep
prendre l'habitude d'ecrire:
     MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_MOVE
et non
     MOUSEEVENTF_ABSOLUTE + MOUSEEVENTF_MOVE

...
dimanche 30 novembre 2008 à 08:30:15 | Re : SendInput

Renfield

Administrateur CodeS-SourceS

Option Explicit

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Declare Function ClipCursor Lib "user32.dll" (ByRef lpRect As Any) As Long
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Public Function Check_Mouse_State() As Boolean
    If (GetAsyncKeyState(2) And &H8000) = &H8000 Then
        Check_Mouse_State = True
    End If
End Function

Private Sub Form_Load()
Dim tR As RECT
    With tR
        .Left = ScaleX(Screen.Width / 2, vbTwips, vbPixels)
        .Top = ScaleY(Screen.Height / 2, vbTwips, vbPixels)
        .Right = .Left + 1
        .Bottom = .Top + 1
    End With
    ClipCursor tR
    Do Until Check_Mouse_State
        DoEvents
    Loop
    ClipCursor ByVal 0&
End Sub
Option Explicit

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Declare Function ClipCursor Lib "user32.dll" (ByRef lpRect As Any) As Long
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Public Function Check_Mouse_State() As Boolean
    If (GetAsyncKeyState(2) And &H8000) = &H8000 Then
        Check_Mouse_State = True
    End If
End Function

Private Sub Form_Load()
Dim tR As RECT
    With tR
        .Left = ScaleX(Screen.Width / 2, vbTwips, vbPixels)
        .Top = ScaleY(Screen.Height / 2, vbTwips, vbPixels)
        .Right = .Left + 1
        .Bottom = .Top + 1
    End With
    ClipCursor tR
    Do Until Check_Mouse_State
        DoEvents
    Loop
    ClipCursor ByVal 0&
End Sub

lundi 1 décembre 2008 à 05:27:17 | Re : SendInput

sergiooi

Merci! ca marche! mais le titre du sujet est sendinput, non? je vais quand meme essayer si ca marche dans mon jeu . C'est vrai que c'est plus clair avec fonction check_mouse_state , merci.
lundi 1 décembre 2008 à 05:37:01 | Re : SendInput

sergiooi

Resalut. et non, ca ne marche pas dans mon jeu. :( ya vraiment que sendinput qui marche pour moi. Merci encore :)
lundi 1 décembre 2008 à 06:10:51 | Re : SendInput

Renfield

Administrateur CodeS-SourceS
"mais le titre du sujet est sendinput, non?"

ouais, enfin, tu connais ton besoin, pas la solution technique...

parles nous un peu plus de ce jeu...
si on sais sur quoi tu bosses, de nouvelles voies s'ouvriront surement
lundi 1 décembre 2008 à 06:55:22 | Re : SendInput

sergiooi

Ouais désolé... mais  sendinput fonctionne sur mon jeu, je l'ai essayé. La seule chose que je n'arrive pas à faire, c'est de bouger ma souris avec sendinput à une position spécifique de mon écran, je réussi à faire bouger mais pas au bonnes coordonnées ... (je suis débutant alors...XD) dans ce bout de code:

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


Load the information needed to synthesize pressing the left mouse button.
    mouseevent.dx = 512    
    mouseevent.dy = 384
    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

Comment dois-je m'y prendre??? Aidez moi quequn!! lol SVP
Merci de ton temps et ton aide!! :) :)
mardi 2 décembre 2008 à 18:46:39 | Re : SendInput

sergiooi

Réponse acceptée !

yen as plus de probleme, j'ai trouvé.

Merci!


1 2

Cette discussion est classée dans : bouton, droit, souris, coordonnées, sendinput


Répondre à ce message

Sujets en rapport avec ce message

bouton droit de la souris [ par WareG ] BJRetant encore novice en programmation j'ai un petit problème. J'aimerais avec le bouton droit de la souris faire apparaitre un menu flottant dans un ajout de menu au bouton droit souris ? [ par frank ] Salut a tous,je desire ajouter au menu de ma souris une commande d'execution de par rapport a mon programmeex: on peut avec le bouton droit faire un c Simuler un Install de fichier .inf via le bouton droit souris [ par carlos95 ] Je cherche à faire un script qui fait exactement la même chose (install d'un fichier .inf) que l'option Installer via le bouton droit de la souris.Je Comment savoir sur quel bouton la souris a cliqué? (gauche ou droit) [ par issoux ] Voila le titre dit tout je pense : Je voudrais effectuer un certain traitement quand on clique gauche et 1 autre quand on clique droit (tut ca sur le *****************Comment bloquer le bouton droit de la souris partout dans le projet??????*************** [ par MasterH ] Je doit empêche que l'utilisateur utilise le menu du bouton droit de la souris tout au long de mon projet. Les option Couper et Suprimer font planté l Récupération des coordonnées X et Y de la souris en cliquant-droit sur un graphique Excel [ par DidierLoche ] Bonjour,J'ai un graphique Excel avec en fond de la zône de traçage la mappemonde: l'axe X va de -180 à +180° de longitude et Y va de -90 à +90° de lat Déplacement et clique droit de la souris automatique [ par tounecrazyboy ] Salut les compagnons code source, je voulais savoir s'il existait un petit programme permettant de déplacer la souris de manière automatique pour poin Transformer les coordonnées de la souris en coordonnée sur le graphique [ par iivxsiuol ] Bonjour, Voilà plus d'une semaine que je cherche déséspérement la réponse à mon problème: J'ai un graphique excel dans un onglet séparé. J'aimerai Afficher un menu au clic droit souris en vb.net ? [ par Duke49 ] Bonjour, j'ai un contrôle MenuStrip1 avec un menu racine appelé ActionsListeToolStripMenuItem qui à 2 sous menus. 'Le menu n'est pas visible Actions évenement mouse sur un Command (bouton) [ par henneuse_alain ] Bonjour a toutes et tous j'ai cherché en vain la possibilité d'incrémenter une valeur tant que le bouton (Command_Click) est enfoncer par la souris ,c


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,544 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales