IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Détecter clic de souris hors form


Sujet :

VB.NET

  1. #1
    Membre régulier Avatar de MrThorr
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 83
    Points : 90
    Points
    90
    Par défaut Détecter clic de souris hors form
    Bonjour,

    Je suis en traind e faire une petite appli qui lance un chrono, et j'aimerais qu'elle enregistre un temps a chaque clic de souris.

    Mais il faut que les clic de souris soient capturés méme quand l'application est réduite (le pc sert a autre choses en méme temps).

    J'ai cherché sur le net, conclusion il faut passer par un hook souris, mais je ne trouve pas de source en vb.net... il y en as beacoup en C# mais rien pour moi .

    Avez vous une piste ?

    Merci d'avence !

    Cordialement
    "La root ? Là où on va on a pas besoin...de root." Emmett L. Brown

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Je ne connais pas d'exemple en VB.NET, mais celui ci en C# est très bien :
    http://www.codeproject.com/KB/system...ystemhook.aspx

    Tu peux le convertir en VB.NET si tu veux, ou plus simplement, utiliser directement la DLL à partir de VB.NET... Les 2 DLL Kennedy.ManagedHooks.dll et SystemHookCore.dll sont nécessaires, mais c'est la 1e qu'il faut référencer dans ton projet VB.NET (l'autre est une DLL native, elle doit juste se trouver dans le même répertoire)

  3. #3
    Membre régulier Avatar de MrThorr
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 83
    Points : 90
    Points
    90
    Par défaut
    Bonjour et merci de votre réponse !

    Je commence le VB et j'avoue que je suis un peu perdu..

    J'ai importé la dll dans le projet, je l'ai déclaré en faisant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports Kennedy.ManagedHooks
    , mais impossible d'intensier l'objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mouseHook = new MouseHook();
    , l'erreur retournée est : mouseHook : déclaration inattendue.

    Avez vous une idée?

    Cordialement
    "La root ? Là où on va on a pas besoin...de root." Emmett L. Brown

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par MrThorr Voir le message
    J'ai importé la dll dans le projet, je l'ai déclaré en faisant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports Kennedy.ManagedHooks
    Ca ne suffit pas, il faut ajouter une référence à la DLL dans le projet (clic droit sur le projet, ajouter une référence)

    Citation Envoyé par MrThorr Voir le message
    mais impossible d'intensier l'objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mouseHook = new MouseHook();
    l'erreur retournée est : mouseHook : déclaration inattendue.
    Il n'y a pas de point-virgule en VB.NET...
    Et il faut déclarer l'objet avant de pouvoir l'instancier. D'autre part, évite de donner à une variable le même nom que son type...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim hook As MouseHook
    hook = New MouseHook()
    Ou alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim hook As New MouseHook()

  5. #5
    Membre régulier Avatar de MrThorr
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 83
    Points : 90
    Points
    90
    Par défaut
    Pardon, c'est une erreur, je n'ai pas mi de point virgule (mauvaise habitude du C ).

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Imports Kennedy.ManagedHooks
    
    Public Class Form1
        Dim mouseHook As New MouseHook
       mouseHook = MouseHook()
    
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
    
        End Sub
    
        Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            mouseHook.InstallHook()
    
    
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            mouseHook.UninstallHook()
        End Sub
    
    
    End Class
    J'ai une erreur au mouseHook : Déclaration inattendue...

    J'ai pourtant respecté la syntaxe non ??

    "La root ? Là où on va on a pas besoin...de root." Emmett L. Brown

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    On ne peut pas mettre d'instructions directement dans le corps de la classe, seulement des déclarations. En plus, la ligne en gras est inutile, puisque mouseHook est directement initialisé lors de sa déclaration...

  7. #7
    Membre régulier Avatar de MrThorr
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 83
    Points : 90
    Points
    90
    Par défaut
    En enlevant cette ligne en gras sa va mieux .

    Maintenant, j'ai un ennui lors de la conversion du Handler en C# :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mouseHook.MouseEvent += new Kennedy.ManagedHooks.MouseHook.MouseEventHandler(mouseHook_MouseEvent);
    Une fois converti j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddHandler mouseHook.MouseEvent, AddressOf mouseHook_MouseEvent
    sauf que le mouseHook_MouseEvent n'est pas déclaré, j'obtiens donc une erreur, de quel type je dois déclarer ceci ?

    Piouff, merci en tout cas
    "La root ? Là où on va on a pas besoin...de root." Emmett L. Brown

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    mouseHook_MouseEvent est la méthode qui gère l'évènement MouseEvent (cf. sa définition sur la page Code Project)

    Encore une fois, tu devrais nommer la variable autrement... En C#, c'est bien un nom de différent (à cause de la minuscule au début), mais VB ne différencie pas les majuscules/minuscules dans les noms de variable

  9. #9
    Membre régulier Avatar de MrThorr
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 83
    Points : 90
    Points
    90
    Par défaut
    Je ne comprends pas... Je suis allé voir sur Code Project, mais je ne comprends toujours pas...

    Merci du conseil, je renomme tout dessuite...
    "La root ? Là où on va on a pas besoin...de root." Emmett L. Brown

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par MrThorr Voir le message
    Je ne comprends pas... Je suis allé voir sur Code Project, mais je ne comprends toujours pas...
    tu comprends pas quoi exactement ?

  11. #11
    Membre régulier Avatar de MrThorr
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 83
    Points : 90
    Points
    90
    Par défaut
    Le problème avec mouseHook_MouseEvent.

    Pourquoi après : AddHandler mouseHook.MouseEvent il faut faire un AddressOf ?

    Je ne comprends pas la syntaxte, donc je n'arrive pa as voir ce qui ne va pas...
    "La root ? Là où on va on a pas besoin...de root." Emmett L. Brown

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    C'est la syntaxe pour ajouter un gestionnaire d'évènement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddHandler évènement, AddressOf méthodeQuiGèreLEvènement
    Il faut avoir déclaré la méthode méthodeQuiGèreLEvènement bien sûr

  13. #13
    Membre régulier Avatar de MrThorr
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 83
    Points : 90
    Points
    90
    Par défaut
    Sur CodePorject, ils déclarent la méthode comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub hook_evenement(ByVal mEvent As MouseEvents, ByVal x As Integer, ByVal y As Integer)
            ' Action...
        End Sub
    Mais quand j'ajoute le gestionnaire via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddHandler hook.MouseEvent, AddressOf hook_evenement
    , j'ai une erreur :

    Erreur 2 La méthode 'Private Sub hook_MouseEvent(mEvent As Kennedy.ManagedHooks.MouseEvents, x As Integer, y As Integer)' n'a pas une signature compatible avec le délégué 'Delegate Sub MouseEventHandler(mEvent As Kennedy.ManagedHooks.MouseEvents, point As System.Drawing.Point)'. C:\Documents and Settings\Bruno\Mes documents\Visual Studio 2008\Projects\testHookSouris\testHookSouris\Form1.vb 20 47 testHookSouris
    "La root ? Là où on va on a pas besoin...de root." Emmett L. Brown

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ah ok, je vois le problème... En fait le mec a du modifier un peu sa librairie, mais il a pas mis à jour le code dans l'article.
    Il faut déclarer le handler comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub hook_evenement(ByVal mEvent As MouseEvents, ByVal position As System.Drawing.Point)
            ' Action...
    End Sub

  15. #15
    Membre averti Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Points : 426
    Points
    426
    Par défaut
    Je débute également, mais visiblement il faut que tu passes un drawing.point comme second argument de ta procédure, un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Point as New Drawing.Point(X, Y)
     
    Private Sub hook_evenement(ByVal mEvent As MouseEvents, ByVal Point As Drawing.Point)
            ' Action...
        End Sub

    EDIT: il y a plus rapide que moi visiblement...

  16. #16
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Ah ok, je vois le problème... En fait le mec a du modifier un peu sa librairie, mais il a pas mis à jour le code dans l'article.
    Il faut déclarer le handler comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub hook_evenement(ByVal mEvent As MouseEvents, ByVal position As System.Drawing.Point)
            ' Action...
    End Sub
    Citation Envoyé par roster Voir le message
    Je débute également, mais visiblement il faut que tu passes un drawing.point comme second argument de ta procédure, un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Point as New Drawing.Point(X, Y)
     
    Private Sub hook_evenement(ByVal mEvent As MouseEvents, ByVal Point As Drawing.Point)
            ' Action...
        End Sub
    Quelle synchronization ... à 1 minute près
    Par contre, inutile de déclarer un point en dehors de la méthode...

  17. #17
    Membre régulier Avatar de MrThorr
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 83
    Points : 90
    Points
    90
    Par défaut
    Haha, maintenant, c'est bon...

    J'ai un dernier problème..., je veut uniquement prendre en compte les clic sur le bouton du milieu, j'utilise donc des if :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Private Sub hook_MouseEvent(ByVal mEvent As MouseEvents, ByVal position As System.Drawing.Point)
            If mEvent.ToString = "519" Then
                MessageBox.Show("Bouton milieu enfoncé")
            End If
            If mEvent.ToString = "520" Then
                MessageBox.Show("Bouton milieu relâché")
            End If
        End Sub
    J'ai mis les deux, mais pour la gestion d'un événement un seul suffit.

    Dans la logique, lors d'un appui sur le bouton du milieu, je devrais avoir deux messages : un "Bouton milieu enfoncé" et un "Bouton milieu relâché", or la j'ai deux de chaque.

    Le problème viens de moi (je n'ai pas compris un truc) ou il y as bien un souci au niveau de la librairie ?
    "La root ? Là où on va on a pas besoin...de root." Emmett L. Brown

  18. #18
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    t'es sûr que t'as pas ajouté le handler 2 fois ? Parce que je vois pas vraiment d'autre explication...

    Sinon, c'est Quand même bizarre que l'Enum MouseEvents ne contienne pas de définition pour MiddleButtonUp et MiddleButtonDown :S
    Faudrait envisager de les ajouter...

  19. #19
    Membre régulier Avatar de MrThorr
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 83
    Points : 90
    Points
    90
    Par défaut
    J'avais effectivement mis 2 fois le handler...

    Pour le MiddleButtonUp non, il n'y est pas, il y as clic droit et gauche enfoncé / relaché, scrool mais pas le bouton du millieu...

    Dans le prog de CodeProject, lors de l'exécution, c'est pareil, c'est de la que j'ai récupéré les 519 et 520...

    Je ferais un petit tuto sur l'utilisation des hook souris en vb.net, sa pourra surement servir a quelqu'un un jour...

    En tout cas, merci sincèrement pour votre aide (très synchro ? ).

    Codrialement
    "La root ? Là où on va on a pas besoin...de root." Emmett L. Brown

  20. #20
    Membre averti Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Points : 426
    Points
    426
    Par défaut
    Citation Envoyé par MrThorr Voir le message

    Je ferais un petit tuto sur l'utilisation des hook souris en vb.net, sa pourra surement servir a quelqu'un un jour...
    Oui merci beaucoup!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Détecter clic de souris sur une autre application
    Par xenos dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 05/08/2010, 09h18
  2. Detection de la souris hors Form
    Par titip dans le forum Windows Forms
    Réponses: 1
    Dernier message: 24/08/2008, 17h00
  3. Evenement souris hors Form:
    Par Snooky68 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 20/07/2008, 11h28
  4. Détecter un clic de souris
    Par illioc dans le forum Delphi
    Réponses: 17
    Dernier message: 12/02/2007, 00h59
  5. Réponses: 8
    Dernier message: 14/03/2005, 21h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo