Problème pour mouse_event sous Seven 64b.

Résolu
frankinfo - 7 déc. 2012 à 16:31
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 7 déc. 2012 à 18:43
Bonjour,
J'essaie en vain de faire une appli sous Visual Basic Express 2010 sous Seven 64b. Le but est de faire un auto-clicker.

Je déclare ceci :
Declare Sub mouse_event Lib "user64" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

Et plus loin, je voudrais faire un clic gauche de souris à la position mémorisée
Dim X As Integer = Val(txt_mouse_x.Text)
Dim Y As Integer = Val(txt_mouse_y.Text)
Windows.Forms.Cursor.Position = New System.Drawing.Point(X, Y)
mouse_event(&H2, 0, 0, 0, 1)
mouse_event(&H4, 0, 0, 0, 1)

Le problème est que sous Seven 64b, le mouse_event plante :
"Impossible de charger la DLL 'user64': Le module spécifié est introuvable. (Exception de HRESULT : 0x8007007E)"

Impossible de faire un clic gauche de souris sous Seven 64b. Vous pouvez m'aiguiller vers la solution ?
Merci.

8 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 déc. 2012 à 18:43
Je n'ai pas tout compris mais ça marche

Cesse d'inventer des librairies inexistantes, "au feeling" et tu t'en porteras mieux.
La librairie User64.dll n'existait tout simplement pas et la librairie User32.dll est celle qu'utilise également Win 7 64 bits. Voilà tout
Te reste à libérer cette discussion (un clic sur le tag "réponse acceptée").
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 déc. 2012 à 17:10
Bonjour,
1) J'ignore ce qu'est la librairie "user64" ! D'où la sors-tu ?
2) pas de type long en VB.Net

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Heu... Ben j'en sais rien, j'ai pompé un code et j'ai vu qu'il était en user32
Etant en 64b, j'ai changé...
Mais peut-être que je n'utilise pas la bonne méthode ? J'arrive à avoir la position de mon curseur en X et Y sur mon écran, je veux juste faire un clic maintenant.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
7 déc. 2012 à 18:16
Bonjour,

En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
0

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

Posez votre question
Bonjour,
Ok, j'ai fais ces modifs dans mon VB.
Mais sinon, une idée pour ce faire ce clic de souris ?
0
Pour m'aider à comprendre, voilà le message complètement obscure pour moi :
Un appel à la fonction PInvoke 'auto_clic!WindowsApplication1.frmautoclic::mouse_event' a déséquilibré la pile. Cela peut se produire, car la signature PInvoke managée ne correspond pas à la signature cible non managée. Vérifiez que la convention d'appel et les paramètres de la signature PInvoke correspondent à la signature non managée cible.

L'erreur est sur : mouse_event(&H2, 0, 0, 0, 1)

Merci.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
7 déc. 2012 à 18:36
Bonjour,

As-tu modifié le code (Long -> Integer) comme te l'a conseillé UcFoutu ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
0
Oui mais même souci...
MAIS maintenant, avec cette méthode, ça marche :

Private Declare Sub mouse_event Lib "user32" (ByVal dwflags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cbuttons As Integer, ByVal dwextrainfo As Integer)
Private Const mouseclickup = 4
Private Const mouseclickdown = 2

et la commande
Windows.Forms.Cursor.Position = New System.Drawing.Point(X, Y)
mouse_event(mouseclickdown, 0, 0, 0, 0)
mouse_event(mouseclickup, 0, 0, 0, 0)

Je n'ai pas tout compris mais ça marche. Merci à vous pour vos réponses.
0
Rejoignez-nous