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

Macros et VBA Excel Discussion :

Cliquer sur un bouton d'une application externe


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2019
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 133
    Par défaut Cliquer sur un bouton d'une application externe
    Bonjour,

    Je travaille sur une macro qui va me permettre de remplir des champs d'une application avec une trame bien définie. Pour le moment j'arrive à activer mon application en premier plan via une macro et il me faut, par la suite, de cliquer sur un bouton sur cette application, en l’occurrence, le bouton est "Déclarer incident", pour avoir les champs à remplir, que je compte remplir avec la méthode Sendkeys.
    Ma question, est comment je peux cliquer sur ce bouton via VBA?

    Merci d'avance pour votre aide.

    Cdt;

  2. #2
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2019
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 133
    Par défaut
    Voici le code pour activer l'application:
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Option Explicit
    Private Declare Function GetDesktopWindow Lib "user32" () As Long
    Private Declare Function GetWindow& Lib "user32" (ByVal hwnd&, ByVal wCmd&)
    Private Declare Function GetWindowLong& Lib "user32" _
    Alias "GetWindowLongA" (ByVal hwnd&, ByVal nIndex&)
    Private Declare Function GetWindowText& Lib "user32" Alias _
    "GetWindowTextA" (ByVal hwnd&, ByVal lpString$, ByVal aint&)
    Private Const mconMAXLEN = 255
     
    Sub AxelActivate()
     
    Dim hwnd&, Style&, Title$, i&
    hwnd = GetWindow(GetDesktopWindow(), 5)
     
     
    Do While hwnd
    Title = GetCaption(hwnd)
    If Len(Title) Then
    ' Enum visible windows only
        If GetWindowLong(hwnd, -16) And &H10000000 Then
            If InStr(1, Title, "Axel", 1) Then
            AppActivate Title
     
            SendKeys "~"
     
            Exit Sub
            End If
     
        End If
    End If
     
    hwnd = GetWindow(hwnd, 2)
    Loop
     
    MsgBox "Vérifier si l'application GIR est ouverte !", vbCritical, "ERROR"
     
    End Sub
     
    Private Function GetCaption(hwnd&) As String
    Dim i%, Buffer$: Buffer = String$(254, 0)
    i = GetWindowText(hwnd, Buffer, 255)
    If i Then GetCaption = Left$(Buffer, i)
    End Function

  3. #3
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Si ton application ne fournit pas de dll utilisable par VBA, tu ne pourras la manipuler que via des Sendkeys.
    Essaye, manuellement, de sélectionner ton bouton en appuyant, juste après l'ouverture d'axel, sur la touche Tab.
    Tu compte le nombre de tabulations, et tu reproduis ce comportement par SendKeys.

    Il existe également une fonction de l'api windows plus fiable que SendKeys, mais je ne me rappelle plus son nom.
    Je vais chercher et te tiens informé.

    L'api en question est keyb_event

  4. #4
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2019
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 133
    Par défaut
    Bonjour Franck,

    Merci pour ton retour. J'ai essayé Sendkeys avant de poster cette discussion car le problème pour le premier bouton il n'y a pas moyen de le faire avec cette méthode.
    Je vais chercher sur keyb_event et voir ce que ça va donner.

    Cdt;

  5. #5
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Je vais chercher sur keyb_event et voir ce que ça va donner.
    Rigoureusement la même chose.
    Peux-tu, après l'ouverture d'Axel, "sélectionner" le bouton voulu, sans toucher la souris, juste au clavier?

    Si non, ça risque d'être compliqué, voir impossible...
    Peut-être en calculant la distance de ce bouton avec le haut et la gauche de l'écran, utiliser la fonction de l'api SetCursorPos...
    Compliqué tout cela; surtout sans connaitre ni accéder à Axel...

  6. #6
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2019
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 133
    Par défaut
    C'est le problème en fait, impossible de sélectionner le bouton sans souris. Y a pas de solution vraiment ?

  7. #7
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Essaye ceci :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
    Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
    Private Declare Function GetDesktopWindow Lib "user32" () As Long
    Private Declare Function GetWindow& Lib "user32" (ByVal hwnd&, ByVal wCmd&)
    Private Declare Function GetWindowLong& Lib "user32" _
    Alias "GetWindowLongA" (ByVal hwnd&, ByVal nIndex&)
    Private Declare Function GetWindowText& Lib "user32" Alias _
    "GetWindowTextA" (ByVal hwnd&, ByVal lpString$, ByVal aint&)
     
    Private Type position
        Left As Integer
        Top As Integer
    End Type
     
    Private Const mconMAXLEN = 255
    Private Const MOUSEEVENTF_LEFTDOWN = &H2
    Private Const MOUSEEVENTF_LEFTUP = &H4
     
    Sub AxelActivate()
     
    Dim hwnd&, Style&, Title$, i&
    hwnd = GetWindow(GetDesktopWindow(), 5)
     
     
    Do While hwnd
    Title = GetCaption(hwnd)
    If Len(Title) Then
    ' Enum visible windows only
        If GetWindowLong(hwnd, -16) And &H10000000 Then
            If InStr(1, Title, "Axel", 1) Then
            AppActivate Title
     
            SendKeys "~"
     
            Exit Sub
            End If
     
        End If
    End If
     
    hwnd = GetWindow(hwnd, 2)
    Loop
     
    MsgBox "Vérifier si l'application GIR est ouverte !", vbCritical, "ERROR"
     
        PositionneCurseur 1500, 200  '********** va placer le curseur souris aux coordonnées 1500 x 200 à toi de chercher ou est ton bouton.
    End Sub
     
    Private Function GetCaption(hwnd&) As String
    Dim i%, Buffer$: Buffer = String$(254, 0)
    i = GetWindowText(hwnd, Buffer, 255)
    If i Then GetCaption = Left$(Buffer, i)
    End Function
     
    Sub PositionneCurseur(L As Long, T As Long)
    Dim pos As position, L As Long
        pos.Left = L
        pos.Top = T
        L = SetCursorPos(pos.Left, pos.Top)
        'mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
        'mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
    End Sub
    Ce code fonctionnera sur ton écran, une fois que tu auras adapté la position du curseur pour le mettre sur ton bouton...
    Ceci fait, tu pourras enlever les ' qui commentent les deux dernières lignes de code...
    Pour une application mutli utilisateurs, ça va se compliquer.

  8. #8
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2019
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 133
    Par défaut
    Le positionnement du curseur ne marche pas, en plus je ne vois pas l'utilité de le placer sans que cela clique sur le bouton.
    Je suis encore coincé avec problème.

  9. #9
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Bonsoir,

    Pour le Click, il vous suffit de débloquer les moise évent (mis en commentaires) dans le code qui vous a été fournis, je pense.

    Cependant, l'application en question est-elle un executable ou une Web application (compatible Internet Explorer) , car s'il s'agit d'une Web application il serait préférable de passer par un objet IE dans votre code, plutôt qu'une automatisation via Api and Sendkeys.

    De nombreux exemples et un très bon tuto de Qwazerty sur ce forum.

    Bav,
    MFoxy

  10. #10
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2019
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 133
    Par défaut
    Désolé j'ai pas compris les deux dernières lignes, je viens de chercher et effectivement ça permet de presser et relâcher le bouton. Merci !
    Par contre le curseur ne bouge pas, j'ai changé les valeur L T mais rien ne se produit.
    Après si il y a d'autres moyens pour cliquer sur le bouton sans pas par le positionnement du curseur, ça serait parfait.

    Pour ta question par rapport au type de l'application, il s'agit bien d'une .exe

    Merci pour vos retours.

  11. #11
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 248
    Par défaut
    hello,
    voici un bout de code en vba qui permet de cliquer sur un bouton d'une application externe en se basant sur le titre de la fenêtre de l'application et le texte du bouton.
    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
    Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" ( _           
                        ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Public Declare PtrSafe Function CloseWindow Lib "user32" (ByVal hWnd As Long) As Long
    Public Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" ( _
                ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
                lParam As Any) As Long
    Public Declare PtrSafe Function FindWindowEx Lib "user32" _
                Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, _
                ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
    Public Const BM_CLICK As Long = &HF5
     
    Private Sub BoutonDeclarer_Click()
        Dim hWndApp, hWndButton As Long
        hWndApp = FindWindow(vbNullString, "MonAppli")
        If hWndApp Then hWndButton = FindWindowEx(hWndApp, 0&, vbNullString, "Déclarer incident")
        If hWndButton Then Call SendMessage(hWndButton, BM_CLICK, 0, 0)
    End Sub
    Pour le tester, j'ai réalisé une petite application en dotnet (en pièce jointe) qui comprend une zone de texte et deux boutons. Quand on appuie sur le bouton Déclarer incident, le texte Bouton cliqué ! apparaît dans la zone de texte.
    Voici le résultat :
    Nom : vba_appui_bouton_appli_externe.PNG
Affichages : 1226
Taille : 29,8 Ko

    Excel 2010 - Windows 10

    Ami calmant, J.P
    Fichiers attachés Fichiers attachés

  12. #12
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Je viens de tester mon code, avec Firefox comme "appli externe", ça fonctionne...

  13. #13
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Bonjour,

    +1 jurassic pork, simple, clair et précis.

  14. #14
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2019
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 133
    Par défaut
    Bonjour,
    Désolé de vous importuner, j'ai essayé le code de @jurassic pork mais cela ne marche pas chez moi. Je l'ai adapté comme ce-ci:
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Option Explicit
    Private Declare Function GetDesktopWindow Lib "user32" () As Long
    Private Declare Function GetWindow& Lib "user32" (ByVal hWnd&, ByVal wCmd&)
    Private Declare Function GetWindowLong& Lib "user32" _
    Alias "GetWindowLongA" (ByVal hWnd&, ByVal nIndex&)
    Private Declare Function GetWindowText& Lib "user32" Alias _
    "GetWindowTextA" (ByVal hWnd&, ByVal lpString$, ByVal aint&)
    Private Const mconMAXLEN = 255
     
    Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" ( _
                        ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Public Declare PtrSafe Function CloseWindow Lib "user32" (ByVal hWnd As Long) As Long
    Public Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" ( _
                ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
                lParam As Any) As Long
    Public Declare PtrSafe Function FindWindowEx Lib "user32" _
                Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, _
                ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
    Public Const BM_CLICK As Long = &HF5
     
     
    Sub AxelActivate()
     
    Dim hWnd&, Style&, Title$, i&
    Dim Nom As String
    Dim hWndApp, hWndButton As Long
     
    hWnd = GetWindow(GetDesktopWindow(), 5)
     
    '
    Do While hWnd
    Title = GetCaption(hWnd)
    If Len(Title) Then
    '
        If GetWindowLong(hWnd, -16) And &H10000000 Then
            If InStr(1, Title, "Axel", 1) Then
            AppActivate Title
     
            SendKeys "~"
     
    Application.Wait Time + TimeSerial(0, 0, 2)
     
            Exit Sub
     
            End If
     
        End If
    End If
     
    hWnd = GetWindow(hWnd, 2)
     
    hWndApp = FindWindow(vbNullString, "Axel")
     
    If hWndApp Then hWndButton = FindWindowEx(hWndApp, 0&, vbNullString, "Déclarer incident")
     
    If hWndButton Then Call SendMessage(hWndButton, BM_CLICK, 0, 0)
     
     
    Loop
     
    MsgBox "Vérifier si l'application Axel est ouverte !", vbCritical, "ERROR"
     
    End Sub
     
    Private Function GetCaption(hWnd&) As String
    Dim i%, Buffer$: Buffer = String$(254, 0)
    i = GetWindowText(hWnd, Buffer, 255)
    If i Then GetCaption = Left$(Buffer, i)
    End Function
    Pour l'idée de @pijaku, ça sera un peu compliquer de l'appliquer vu qu'il y aura potentiellement d'autres utilisateurs pour le fichier, du coup je l'ai laissée tomber.
    Merci pour votre aide.

    Cdt;

  15. #15
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2019
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 133
    Par défaut
    J'ai créé un module pour ce bout de 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
    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
    ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Public Declare Function CloseWindow Lib "user32" (ByVal hWnd As Long) As Long
    Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
    ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
    lParam As Any) As Long
    Public Declare Function FindWindowEx Lib "user32" _
    Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, _
    ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
    Public Const BM_CLICK As Long = &HF5
     
     
    Sub BoutonDeclarer_Click(btn)
    Dim hWndApp, hWndButton As Long
    hWndApp = FindWindow(vbNullString, "Axel")
    If hWndApp Then hWndButton = FindWindowEx(hWndApp, 0&, vbNullString, btn)
    If hWndButton Then Call SendMessage(hWndButton, BM_CLICK, 0, 0)
    End Sub
    Et je l'ai appelé dans mon code avec la méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run "BoutonDeclarer_Click", "Déclarer incident"
    Toujours rien malheureusement.

  16. #16
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 248
    Par défaut
    hello,
    si cela ne fonctionne pas c'est peut être que l'application que tu veux piloter n'a pas des boutons "standard" ou une structure particulière. Il faudrait que tu regardes ton application avec un outil espion comme spy++ pour voir comment est défini ton bouton. Voici comment je vois mon application MonAppli avec Spy++ :

    Nom : spy++_MonAppli.png
Affichages : 1146
Taille : 44,3 Ko

    Ami calmant, J.P

  17. #17
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2019
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 133
    Par défaut
    Je n'ai pas spy++ c'est un pc professionnel et les droits sont très limités.
    Je pense que je vais revenir à l'idée de positionnement du curseur comme contournement en attendant une meilleure idée d'automatisation dans l'avenir.
    J'ai une dernière question, la fonction FindWindow nécessite le nom exacte de la caption, dans mon cas ce nom change tout le temps mais il y a le mot "Axel" qui reste inchangé. Parfois j'ai Sommaire - Axel, parfois Historique - Axel etc... y a t-il moyen de chercher uniquement ce mot au lieu du nom exact lors de l’utilisation de FindWindow?

    Merci d'avance.

    Cdt;

  18. #18
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 248
    Par défaut
    hello,
    comme je ne suis pas du genre à lâcher facilement le morceau , alors je te propose en pièce jointe, un classeur excel qui contient une macro qui permet de visualiser dans la première feuille ce que fait spy++. La macro c'est notre ami suisse René Nyffenegger qui l'a écrite et correspond à l'exemple EnumChildWindows.bas qui se trouve dans son dépôt ici. Elle utilise son module winapi écrit en VBA qui contient un grand nombre des fonctions api windows.
    Voici ce que cela donne avec mon application MonAppli lancée :


    Nom : EnumChildWindows_vba.PNG
Affichages : 1181
Taille : 68,0 Ko


    On peut distinguer les numéros de Handle des fenêtres , les éléments enfants des fenêtres (commence par le numéro de handle du parent), les classes et titres.

    Alors si cela n'est pas confidentiel (quitte à flouter des zones) et que tu peux lancer la macro sur ton pc, si tu pouvez nous montrer ce que cela donne pour toi en ce qui concerne ton appli Axel, on en saurait certainement un peu plus.


    En résumé dans le classeur EnumFenWindows
    Dans le module 1 des macros, déclaration des fonctions windows API.
    Dans le module 2 des macros, la macro main qui liste toutes les fenêtres windows.
    Dans le module 3 des macros, la macro Test_FnFindWindowLike qui recherche la fenêtre qui contient le mot Excel dans son titre.

    Citation Envoyé par Heathcliff_1 Voir le message
    Je n'ai pas spy++ c'est un pc professionnel et les droits sont très limités.
    J'ai une dernière question, la fonction FindWindow nécessite le nom exacte de la caption, dans mon cas ce nom change tout le temps mais il y a le mot "Axel" qui reste inchangé. Parfois j'ai Sommaire - Axel, parfois Historique - Axel etc... y a t-il moyen de chercher uniquement ce mot au lieu du nom exact lors de l’utilisation de FindWindow?
    Cdt;
    La fonction FnFindWindowLike du module 3 fait ce que tu demandes (utilisation possible de joker (* ? ) )
    Ami calmant, J.P
    Fichiers attachés Fichiers attachés

  19. #19
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2019
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 133
    Par défaut
    @Jurassic Pork Merci beacuoup pour ton aide. J'ai appris de nouvelles choses dans tes réponses, toutefois, j'ai pu finir ma macro en utilisant finalement mouse_event.
    C'est une solution provisoire pour me décharger ces jours avant de voir comment faire la chose avec des choses plus sérieuses, avec Autoit par exemple.

    En tout cas merci encore une fois pour votre réactivité.

    Bien cordialement;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/04/2014, 14h58
  2. [XL-2010] Cliquer sur un bouton d'une page HTML
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/05/2013, 21h43
  3. [AC-2000] cliquer sur un bouton d'une autre appli par code
    Par noemieze dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/12/2009, 12h05
  4. Cliquer sur un bouton dans une autre application
    Par FredericB dans le forum C++Builder
    Réponses: 16
    Dernier message: 10/05/2008, 17h23
  5. cliquer sur un bouton d'une application extérieure
    Par looc 6699 dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 12/12/2005, 17h46

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