SetCursorPos VB

cs_xon Messages postés 13 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 9 septembre 2011 - 8 sept. 2011 à 08:40
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 11 sept. 2011 à 14:25
Bonjour,

Sur un projet VB6, je dois positionner le pointeur (curseur) de la souris sur un bouton d'une fenêtre. Pour cela, aucun problème, avec l'API SetCursorPos. Cela fonctionne correctement (en convertissant les coordonnées (TwipsPerPixel et l'API ClientToScreen). Le curseur est correctement placé à l'endroit désiré, mais quand je bouge la souris, il reprend la place qu'il avait avant l'appel de la fonction de positionnement de curseur... Est-ce que quelqu'un pourrait m'aider ? Merci d'avance.

11 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
8 sept. 2011 à 09:57
Bonjour,
avec quel code ?
Car sans voir ce qu'il fait, ma foi ...


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
8 sept. 2011 à 15:48
Re,
ton code est d'autant important que je viens d'utiliser SetCursorPos et ClientToScreen en "conjugaison"n, sans avoir le problème dont tu parles !
C'est donc autre chose qui, dans ton code que tu ne montres pas, qui ramène le curseur à sa position initiale !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
8 sept. 2011 à 16:33
Je sens que, sur ce coup-là, je vais décrocher la médaille d'or (détenue par jack) de la boule de crystal
Allez, jack, je te donne une piste : tout est **probablement** dans l'expression (un présent de l'indicatif du verbe avoir en lieu et place d'autre chose ...)
** probablement mais pas assurément, hein ...

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_xon Messages postés 13 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 9 septembre 2011
9 sept. 2011 à 02:56
Pour répondre à ceux qui me demande le code, le voici :

1) Créer une forme avec 2 boutons (par ex. Command1 et Command2)
2) Créer un module avec le code suivant :

Section "Déclarations"

Option Explicit

Public Type POINTAPI
x As Long
y As Long
End Type

Public Declare Function ClientToScreen Lib "user32" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long
Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

Section "Code"

Public Function SetCursorPosition(lHandle As Long, xPos As Long, yPos As Long) As Boolean
On Error GoTo ErrorHandler

Dim x As Long, y As Long
Dim lRet As Long
Dim typPoint As POINTAPI
Dim cbuttons As Long
Dim dwExtraInfo As Long

With Screen
x = CLng(xPos / .TwipsPerPixelX)
y = CLng(yPos / .TwipsPerPixelY)
End With

typPoint.x = x
typPoint.y = y

lRet = ClientToScreen(lHandle, typPoint)
lRet = SetCursorPos(typPoint.x, typPoint.y)
DoEvents

SetCursorPosition = (lRet <> 0)

Exit Function

ErrorHandler:

SetCursorPosition = False


End Function

Dans la forme, attaché le code suivant :

Private Sub Command1_Click()
SetCursorPosition Me.Command2.hWnd, Me.Command2.Width / 2, Me.Command2.Height / 2
End Sub

Exécuter le code. Lorsque l'on appuie sur le bouton "Command1", le curseur de la souris se positionne sur le centre du bouton "Command2". Mais, quand on déplace la souris (ou que l'on clique sur le bouton de la souris), le curseur "saute" sur le bouton "Command1" (position avant l'appel à la fonction SetCursorPosition()).... Alors, que faire ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
9 sept. 2011 à 06:53
Je viens de tester ton code (je n'en avais vraiment besoins, mais ...)
et :
Lorsque l'on appuie sur le bouton "Command1", le curseur de la souris se positionne sur le centre du bouton "Command2"
===>> vrai

Mais, quand on déplace la souris (ou que l'on clique sur le bouton de la souris), le curseur "saute" sur le bouton "Command1" (position avant l'appel à la fonction SetCursorPosition())....
==>> NON ! il reste en place !

Je répète donc :
- ou tu as ailleurs dans ton code d'autres instructions au mouse_move de quelque objet (qui font que le curseur retourne sur Command1), ou encore dans un Timer, etc ...
- ou tu n'exprimes pas ce que tu veux exprimer


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_xon Messages postés 13 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 9 septembre 2011
9 sept. 2011 à 07:06
A ucfoutu.

Merci pour votre réponse. Sur mon PC, le curseur "saute" comme je l'explique...
Mon code ne contient aucune autre instruction ! Mais, il tourne sur une version Windows Server 2003, avec Visual Studio 6 (donc également VB 6). Cette machine est virtualisée avec VM-WARE sous Mac OSX, donc risque d'incompatibilité... Je vais essayer de tester sur une machine native Windows.

Meilleures salutations

XON
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
9 sept. 2011 à 07:29
Let me snif ...

Ah ! cela sent le DirectX et DirectInput


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
9 sept. 2011 à 07:51
1) Que se passe-til en vérifiant (par GetCursorPos) la position de ta souris juste (dans Command1) l'avoir baladée sur Command2 ? Est-elle celle de départ ou celle attendue ?
2) as-tu essayé de voir sur la toile si (on ne ait jamais) d'autres pilotes de souris (pour machine virtuelle) "dialoguaient" autrement ?

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
11 sept. 2011 à 13:42
Par acquit de conscience, modifie le nom de ta fonction SetCursorPosition en Toto, le temps d'un essai; trop proche d'un éventuel mot clé.

Dans quel environnement te trouves-tu ?
Quel Windows ?
Seven en mode XP ?
Quoique, même pas, je viens de faire l'essai :
- VB6 installé dans un mode XP et lancée depuis Seven : les APIs ne fonctionnent pas
- VB6 lancé depuis la machine XP Mode : fonctionne correctement

La prochaine fois, utilise la coloration syntaxique quand tu déposes du code (3eme icone à droite) = plus facile à relire.

T'inquiète Ucfoutu, je suis indétrônable !
PS : cristal, pas crystal (report)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
11 sept. 2011 à 13:50
Salut, Jack

T'inquiète : ce ,n'est pas "au hasard" que j'ai_ écrit ceci :

Ah ! cela sent le DirectX et DirectInput


Il y a réellement un problème de dialogue avec le driver de la souris avec VM-WARE (et pas uniquement si utilisé depuis Mac, en plus)

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
11 sept. 2011 à 14:25
Pour mieux comprendre ce qui se passe, j'ai choisi d'inviter à lire ceci. J'aurais pu choisir d'autres discussions bien plus précises encore, mais celle-ci relate exactement le même problème : une image du curseur qui se déplace, mais seule, à l'écran (la position "logique" du curseur restant, elle, toutefois inchangée en mémoire)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0