[Hook] Faire un simple click

Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 - 12 mai 2006 à 02:59
PWM63 Messages postés 127 Date d'inscription lundi 11 octobre 2004 Statut Membre Dernière intervention 18 mai 2016 - 6 juin 2011 à 09:56
Bonjour.

j'aimerais faire un clik a la sourie, c pour ca que j'ai fais des recherche et je suis tombé sur un truc qui s'appelle hook qui utilise la user32.dll

j'ai donc fais ce code:
<hr size= "2" width="100%">
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Timer1.Enabled = True
End Sub

Dim I As Integer = 100

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
I = I - 1
Label1.Text = I / 10
If (I = 0) Then
Dim Dwflags As Long = &H2
Dim situation_sourie As Point
Form1.GetCursorPos(situation_sourie)
Dim dx As Long = situation_sourie.X
Dim dy As Long = situation_sourie.Y
Console.WriteLine(dx & " - " & dy) 'm'a servi a voir que GetCursorPos fonctionne
mouse_event(Dwflags, dx, dy, 0, 0)
End If
End Sub

<Runtime.InteropServices.DllImport("user32")> Public Shared Sub mouse_event(ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
End Sub

<Runtime.InteropServices.DllImport("user32")> Public Shared Function GetCursorPos(ByRef lpPoint As Point) As Integer
End Function
<hr size="2" width="100%">infos: on appui sur le bouton1 et celui lance un timer qui compte 10sec. au bout des 10 secondes, il execute le mouse_event. Ces 10 secondes me permmete de placer au préalable ma sourie a l'endroit ou je veut que ca clique.
<hr size="2" width="100%">Alors j'ai test le GetCursorPos et ca fonctionne, par contre le mouse_event merde et fais cette erreur:
PInvokeStackImbalance a été détecté
Message: Un appel à la fonction PInvoke 'New_Project1! New_Project1 .Form1::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.

alors deja que j'ai eu du mal a comprendre comment on fait le code, mais la c le pompom je comprend rien a ce que le debugger veut me dire. en esperant que vous saurez mieux que moi !

<hr size ="2" width="100%">
L U C Y I3 E R @ D

11 réponses

cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
12 mai 2006 à 08:09
Bonjour,

(toujours pas de tuto ?)
à mon avis tu bouge la souris sur la couche du frameworks au lieu de la bouger au niveau driver...

-- Pourquoi faire simple quand on peut faire compliquer --
0
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
12 mai 2006 à 09:31
merci de ta reponse eldim
alors le tuto => ca avance et meme bien
sinon la je doit faire ce programme, mais il me fo juste ca pour le faire.

alors voila, pourrait tu m'expliquer comment tu fait? (bouger la sourie avec le framework)

<hr size="2" width="100%">
L U C Y I3 E R @ D
0
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
12 mai 2006 à 09:42
http://www.vbfrance.com/codes/DEPLACER-SOURIS-SIMULER-CLICK-VIA-API_33920.aspx

-- Pourquoi faire simple quand on peut faire compliquer --
0
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
12 mai 2006 à 11:32
lol j'ai bien sur vu cette source et je m'en suis inspiré et regarde bien, c'est exactement la meme chose (a part les dx, dy qui eux fonctionne). Je me suis inspiré de cette source pour faire le code ci-dessus et il marche pas !

<hr size="2" width="100%">
L U C Y I3 E R @ D
0

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

Posez votre question
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
12 mai 2006 à 11:53
ok excuse
j'ai pas pris le temps de regarder... j'ai juste vu les notes...

à vrai dire j'en sais rien...
essai en déclarant les API sans <Runtime.InteropServices.DllImport("user32")>

je regarderai cette aprem si g le temps

-- Pourquoi faire simple quand on peut faire compliquer --
0
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
12 mai 2006 à 11:55
Bon je vien de faire encore des recherches et j'ai trouvé que en fait il faut mettre ce code ci pour le mouse event:
mouse_event(&H2, 0, 0, 1, 0)
mouse_event(&H4, 0, 0, 1, 0)
1 pour l'appui l'autre pour le reclacher.
voila.
sinon le message ca me le fait toujours, mais c'est visiblement qu'une message informatif (qui fait quand meme titiller le debugger).
donc quand je alnce mon appli directement sans le debugger ca marche.

<hr size="2" width="100%">
L U C Y I3 E R @ D
0
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
12 mai 2006 à 12:07
ok
c'est une détection automatique car ça ne passe pas par le driver sans doute...

-- Pourquoi faire simple quand on peut faire compliquer --
0
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
12 mai 2006 à 18:55
ha ok !

ben tu sait comment on lui dit de faire un breakpoint inversé? (si tu comprend t fort)
allez quelque explication: u breakpoint stop sur la commande, ben l'inverse c'est qu'il fait la commande sans appliquer le debugger.

ca la c chiant pour faire des test chuis obliger de lancer l'exe.

<hr size="2" width="100%">
L U C Y I3 E R @ D
0
PWM63 Messages postés 127 Date d'inscription lundi 11 octobre 2004 Statut Membre Dernière intervention 18 mai 2016
30 déc. 2007 à 01:23
19 mois plus tard, Stéphane a la même erreur que Lucyberad, et, dans un élan de générosité extrême, livre une solution.

Pour que l'exception PInvokeStackImbalance ne soit pas levée pendant le débogage,
et étant donné que même l'instruction Try ne permet pas d'éviter le message d'erreur,
il ne reste plus que cette solution :

Cliquer sur la commande Exceptions... du menu Déboguer ou appuyer sur Ctrl+Alt+E
Développer la liste Managed Debugging Assistants
Décocher la case Levé du nom PInvokeStackImbalance

Stéphane
0
deli2025 Messages postés 40 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 4 mai 2020
3 juin 2011 à 18:57
Effectivement c'est la seul solution qui fonctionne... Merci à toi :)
0
PWM63 Messages postés 127 Date d'inscription lundi 11 octobre 2004 Statut Membre Dernière intervention 18 mai 2016
6 juin 2011 à 09:56
De rien :)

Stéphane
0
Rejoignez-nous