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 :

Simuler clic de souris en arrière plan


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2012
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    Bonjour,

    Depuis quelques jours je suis confronté à un petit problème ...
    Je cherche a automatiser des tâches grâce à une petite application que je suis entrain de développer.

    Je m'explique, je dispose d'un programme qu'il faut que j'actualise toute les heures (professionnel).
    L'actualisation consiste à cliquer sur trois bouton et rentrer du texte dans une textbox.

    Le problème est que je ne sais pas du tout comment faire pour générer des clics à une position précise (X/Y)
    De plus, en arrière plan sans que le curseur ne bouge afin de faire autre chose en même temps.

    J'ai regardé sur internet et je sais déjà qu'il faut utiliser l'API user32.dll de Windows,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <DllImport("user32.dll", CharSet:=CharSet.Auto)>Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInt32, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
        End Function
    Merci

    J'ai essayé ce bout de code mais sa ne fonctionne pas ..


    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
    <DllImport("user32.dll")> Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByRef lParam As IntPtr) As IntPtr
            End Function
            <DllImport("user32.dll")> Shared Function WindowFromPoint(ByVal pnt As Point) As IntPtr
            End Function
     
            Const BM_CLICK As Integer = &HF5&
     
            Public Shared Sub click(ByVal posCursor As Point)
                Dim pnt As Point = posCursor
                Dim hWnd As IntPtr = WindowFromPoint(pnt)
     
                If hWnd <> IntPtr.Zero Then
                    SendMessage(hWnd, BM_CLICK, 0, IntPtr.Zero)
     
                End If
            End Sub

  2. #2
    Membre éclairé Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 667
    Points
    667
    Par défaut
    Bonjour,
    Dans ce fil je cherchais à piloter une application sans les méthodes "sendkeys" : http://www.developpez.net/forums/d14...todes-sendkeys

    Je ne crois pas que l'on puisse simuler des entrées souris ou clavier sans perturber ton travail en cours.
    Quelle est l'application que tu souhaite piloter ?

    En espérant t'avoir aider.
    Merci de ainsi que d'utiliser les boutons et

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2012
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    Bonsoir,

    Je te remercie beaucoup pour ton aide mais l'utilisation de sendmessage dans la source que tu m'as donnée ne permet pas de simuler des cliques à une position données

    Merci quand même

  4. #4
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Pour simuler un click de souris, je n'invente rien car je me suis inspiré de cette source :

    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
     
        'Definie la position du curseur de souris
       <DllImport("user32.dll")> _
        Private Shared Function SetCursorPos(x As Integer, y As Integer) As Boolean
        End Function
     
        'Déclenche un évènement de souris
        <DllImport("user32.dll")> _
        Public Shared Sub mouse_event(dwFlags As Integer, dx As Integer, dy As Integer, cButtons As Integer, dwExtraInfo As Integer)
        End Sub
     
        'Les flags utilisés pour le Mouse Event
        Public Const MOUSEEVENTF_LEFTDOWN As Integer = 2
        Public Const MOUSEEVENTF_LEFTUP As Integer = 4
     
        'Simule le click gauche de souris en passant les valeurs X et Y en argument 
        Public Shared Sub LeftMouseClick(xpos As Integer, ypos As Integer)
            SetCursorPos(xpos, ypos)
            mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0)
            mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0)
        End Sub
    --> Comment l'utiliser à l'aide d'un bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            LeftMouseClick(50, 100)
        End Sub
    A+

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2012
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    Merci pour ta réponse Wallace,
    Mais je voudrais simuler un clique sans bouger le curseur et le faire en arrière plan avec le Handle du programme en question (process).
    Je sais que c'est possible avec sendMessage (user32) mais je ne sais pas comment l'utiliser et j'ai du mal à trouver de la doc sur sa ..

  6. #6
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par Vorehan Voir le message
    Merci pour ta réponse Wallace,
    Mais je voudrais simuler un clique sans bouger le curseur et le faire en arrière plan avec le Handle du programme en question (process).
    Je sais que c'est possible avec sendMessage (user32) mais je ne sais pas comment l'utiliser et j'ai du mal à trouver de la doc sur sa ..
    Même si tu récupères le handle de la fenêtre à l'aide de cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       Dim NotePadHandle as IntPtr = nothing
       Dim processes As Process() = Process.GetProcessesByName("Notepad")
       If processes(0) IsNot Nothing Then
           NotePadHandle = processes(0).MainWindowHandle
       End If
    Il ne te suffira pas simplement de passer ce même Handle à la fonction API SendMessage ! Tout dépends comment est agencé le programme avec lequel tu souhaites interagir.
    Je te suggère d'utiliser Spy++ pour identifier les noms des classes liées au programme avec lequel tu souhaites interagir et enfin d'utiliser la fonction API FindWindowEx pour récupérer un Handle lié à une classe spécifique avant d'utiliser SendMessage.

    Tu sais peut-être qu'il est possible de le faire avec SendMessage mais il n'existe pas de solution générique qui fonctionnera avec tous les programmes !

    A+

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2012
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    Merci de ta réponse Wallace je vais m'y pencher

Discussions similaires

  1. problème simulation clic souris avec "postMessage"
    Par Lustuc dans le forum Windows
    Réponses: 1
    Dernier message: 06/09/2009, 10h49
  2. [VB.NET 2003] Simuler un clic de souris
    Par Kropernic dans le forum Windows Forms
    Réponses: 9
    Dernier message: 30/10/2007, 18h47
  3. Simuler un clic de souris sur fenêtre réduite
    Par Costello dans le forum Delphi
    Réponses: 1
    Dernier message: 31/03/2007, 00h25
  4. simuler clic souris robot
    Par zarbouine dans le forum Langage
    Réponses: 2
    Dernier message: 01/02/2006, 07h49
  5. Simuler un clic de souris
    Par kabikou dans le forum Access
    Réponses: 1
    Dernier message: 28/09/2005, 13h43

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