Bonjour,

J'utilise l'API Windows pour contrôler une application tierce (je ne peux pas vous donner plus de détail, car c'est une application interne). Tout fonctionne à merveille (zones de saisies, listes déroulantes, boutons,...), sauf que j'échoue complètement pour piloter le menu (il y a aussi un menu popup, mais je préférerais me concentrer sur le menu fixe).

A vrai dire, je débute à peine avec UI Automation (j'ai juste déjà réussi à reprendre un bout de code pour contrôler la Frame Notification Bar d'Internet Explorer, mais ma maîtrise s’arrête là).

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
'
Sub main()
 
    'je récupère juste le handle de l'application ci-dessous
    '(j'ai encapsulé les appels aux fonctions de l'API Windows dans des classes, dont la classe statique windows)
    Dim hwnd As Long: hwnd = windows.find(className:="...", name:="...")
 
    If hwnd = 0 Then Exit Sub
 
    Dim hMenu As Long: hMenu = GetMenu(hwnd:=hwnd)
 
    With New CUIAutomation
 
        With .ElementFromHandle(hwnd:=ByVal hwnd).FindAll(scope:=TreeScope_Descendants, Condition:=.CreateTrueCondition()) 'cond)
 
            Dim index As Integer: For index = 0 To .Length - 1
 
                'j'arrive à en autre afficher les noms des menus (pas des sub-menus)
                Debug.Print index, .GetElement(index:=index).CurrentName
 
                'je crois qu'il faille faire un .SetFocus() pour invoquer un clic sur un élément du sous-menu
 
            Next index
 
        End With
 
    End With
 
End Sub
Ps : j'arrive quand même à contrôler le menu de Notepad par exemple sans problème via l'API Windows, mais par pour mon application en question.

Pouvez-vous m'aider à ce sujet ?

Merci par avance !