Lucyberad
Messages postés414Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention26 juillet 2007
-
12 mai 2006 à 02:59
PWM63
Messages postés127Date d'inscriptionlundi 11 octobre 2004StatutMembreDernière intervention18 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 !
Lucyberad
Messages postés414Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention26 juillet 20073 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Lucyberad
Messages postés414Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention26 juillet 20073 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.
Lucyberad
Messages postés414Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention26 juillet 20073 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.
PWM63
Messages postés127Date d'inscriptionlundi 11 octobre 2004StatutMembreDernière intervention18 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