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 :

API IAccessible et CUIAutomation Manque HELPText


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut API IAccessible et CUIAutomation Manque HELPText
    Bonsoir,

    J'utilisais IACCESSIBLE pour afficher des informations sur des éléments du RUBAN, avec OFFICE 2010 cela fonctionne très bien, mais avec OFFICE 2016 (et sans doute OFFICE 2013) cela ne renvoi pas l'ensemble des informations notamment accDescription

    Donc il faut utiliser UI AUTOMATION avec les nouvelles versions.

    Cependant je n'arrive pas à obtenir l'information correspondant à accDescription, sur un Icone cela correspond au Supertip, la description du bouton.
    Voici les 2 résultats

    Nom : IACCESSIBLE.PNG
Affichages : 925
Taille : 30,2 KoNom : UIAUTOMATION.PNG
Affichages : 950
Taille : 34,9 Ko

    Si on utilise des outils comme UISPY.exe on voit bien toutes les infos
    AutomationElement
    General Accessibility
    AccessKey: ""
    AcceleratorKey: ""
    IsKeyboardFocusable: "True"
    LabeledBy: "(null)"
    HelpText: "Fait pivoter le texte selon un angle diagonal ou une orientation verticale.\n\nCette option est souvent utilisée pour insér... l'orientation du texte sélectionné pour rétablir l'orientation normale du texte.\n\nAppuyez sur F1 pour obtenir de l'aide."

    State
    IsEnabled: "True"
    HasKeyboardFocus: "False"

    Identification
    ClassName: "NetUIAnchor"
    ControlType: "ControlType.MenuItem"
    Culture: "(null)"
    AutomationId: ""
    LocalizedControlType: "Élément de menu"
    Name: "Orientation"
    ProcessId: "9712 (EXCEL)"
    RuntimeId: "42 3474756 2 56431232 0"
    IsPassword: "False"
    IsControlElement: "True"
    IsContentElement: "True"

    Visibility
    BoundingRectangle: "(387, 58, 32, 22)"
    ClickablePoint: "(null)"
    IsOffscreen: "False"

    ControlPatterns
    ExpandCollapse
    ExpandCollapseState: "Collapsed"
    idem avec INSPECT en mode ui automation
    Nom : inspect.png
Affichages : 986
Taille : 63,7 Ko

    J'aurais donc besoin de votre aide pour trouver ce qui cloche ou ce qui manque dans mon code
    il faut cliquer sur LANCE et on a 3 secondes pour placer la souris sur l'icone souhaité.

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    Option Explicit
     
    Private Type POINTAPI
        x As Long
        Y As Long
    End Type
     
    #If VBA7 Then
        Private Declare PtrSafe Function GetCursorPos Lib "user32.dll" (lpPoint As POINTAPI) As Long
        Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
        #If Win64 Then
            Private Declare PtrSafe Function AccessibleObjectFromPoint Lib "Oleacc" (ByVal arg1 As LongPtr, ppacc As IAccessible, pvarChild As Variant) As Long
            Private Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As LongPtr)
        #Else
            Private Declare PtrSafe Function AccessibleObjectFromPoint Lib "Oleacc" (ByVal lX As Long, ByVal lY As Long, ppacc As IAccessible, pvarChild As Variant) As Long
        #End If
    #Else
        Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
        Private Declare Function AccessibleObjectFromPoint Lib "Oleacc" (ByVal lX As Long, ByVal lY As Long, ppacc As IAccessible, pvarChild As Variant) As Long
        Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
    #End If
     
    Private Const CHILDID_SELF = &H0&
    Private Const S_OK As Long = &H0
     
     
    Sub lance()
     
        Beep
        Application.OnTime DateAdd("s", 3, Now), "get_element_under_mouse"
     
    End Sub
    Private Sub get_element_under_mouse()
        Dim oIA As IAccessible
        Dim oCmbar As CommandBar
        Dim lResult As Long
        Dim tPt As POINTAPI
        Dim oButton As IAccessible
     
        GetCursorPos tPt
     
        #If Win64 Then
            Dim lngPtr As LongPtr
            CopyMemory lngPtr, tPt, LenB(tPt)
            lResult = AccessibleObjectFromPoint(lngPtr, oIA, 0)
        #Else
            lResult = AccessibleObjectFromPoint(tPt.x, tPt.Y, oIA, 0)
        #End If
     
        If lResult = S_OK Then
            '  On Error Resume Next
            MsgBox "name: " & oIA.accName(CHILDID_SELF) & vbCr & "------------------------------------" _
                 & vbCr & "Description: " & oIA.accDescription(CHILDID_SELF) & vbCr & "------------------------------------" _
                 & vbCr & "Value: " & oIA.accValue(CHILDID_SELF) & vbCr & "------------------------------------" _
                 & vbCr & "KeyboardShortcut: " & oIA.accKeyboardShortcut(CHILDID_SELF) & vbCr & "------------------------------------" _
                 & vbCr & "DefaultAction: " & oIA.accDefaultAction(CHILDID_SELF) & vbCr & "------------------------------------" _
                 & vbCr & "HelpText: " & oIA.accHelp(CHILDID_SELF) & vbCr & "------------------------------------" _
                 & vbCr & "RoleText: " & oIA.AccRole(CHILDID_SELF) & vbCr & "------------------------------------" _
                 & vbCr & "Childcount: " & Val(oIA.accChildCount) & vbCr & "------------------------------------" _
                 & vbCr & "AccState: " & oIA.AccState(CHILDID_SELF), , "IAccessible"
        End If
     
        Dim uiAuto As UIAutomationClient.CUIAutomation
        Dim elmRibbon As UIAutomationClient.IUIAutomationElement
        Dim cndProperty As UIAutomationClient.IUIAutomationCondition
        Dim ptnAcc As UIAutomationClient.IUIAutomationLegacyIAccessiblePattern
        Dim accRibbon As Office.IAccessible
        Dim i As Long
     
        On Error Resume Next
        Set uiAuto = New UIAutomationClient.CUIAutomation
        Set elmRibbon = uiAuto.ElementFromIAccessible(oIA, 0)
     
        If Not elmRibbon Is Nothing Then
            MsgBox "Name: " & elmRibbon.CurrentName _
                 & vbCr & "------------------------------------" _
                 & vbCr & "CurrentAcceleratorKey: " & elmRibbon.CurrentAcceleratorKey _
                 & vbCr & "CurrentAccessKey: " & elmRibbon.CurrentAccessKey _
                 & vbCr & "CurrentAriaProperties: " & elmRibbon.CurrentAriaProperties _
                 & vbCr & "CurrentAriaRole: " & elmRibbon.CurrentAriaRole _
                 & vbCr & "CurrentAutomationId: " & elmRibbon.CurrentAutomationId _
                 & vbCr & "CurrentClassName: " & elmRibbon.CurrentClassName _
                 & vbCr & "CurrentFrameworkId: " & elmRibbon.CurrentFrameworkId _
                 & vbCr & "CurrentHelpText: " & elmRibbon.CurrentHelpText _
                 & vbCr & "CurrentItemStatus: " & elmRibbon.CurrentItemStatus _
                 & vbCr & "CurrentItemType: " & elmRibbon.CurrentItemType _
                 & vbCr & "CurrentLocalizedControlType: " & elmRibbon.CurrentLocalizedControlType _
                 & vbCr & "CurrentProviderDescription: " & elmRibbon.CurrentProviderDescription _
                 & vbCr & "processID :" & elmRibbon.CurrentProcessId _
                 & vbCr & "CurrentItemType: " & elmRibbon.CurrentItemType, , "ui automation"
     
     
     
        End If
    End Sub
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 684
    Par défaut
    Salut,

    quelle reference ajouter pour que UIAutomationClient soit reconnu stp ?

    parmi les proprietes, disposes tu d'une
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    elmRibbon.Properties(UIA_HelpTextPropertyId)
    'ou
    elmRibbon.Properties(30013)
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel (3e édition)
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    Bonjour,

    Il y a une référence à UIAutomationClient
    c:\windows\syswow64\UIAautomationCore.dll

    Cette propriété renvoi ""
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 684
    Par défaut
    Ca refuse de charger la dll de mon cote, j'essaierai ce soir chez moi.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel (3e édition)
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    Merci
    Pour les outils cités ils sont là : https://github.com/blackrosezy/gui-inspect-tool
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Astuce déjà évoquée dans une contribution pour les Windows Seven refusant d'intégrer une dll :
    simuler sous Excel un Enregistrer sous pour pointer le dossier courant sur C:\Windows\SysWOW64
    - ou C:\Windows\System32 - puis cliquer sur Annuler et enfin la référence est possible dans le projet …

    ___________________________________________________________________________________________________________
    Je suis Paris, London, Manchester, Egypte, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

Discussions similaires

  1. [manque de compatibilté entre v8.0 et v9.0 ?]
    Par Gonath dans le forum DirectX
    Réponses: 1
    Dernier message: 07/12/2003, 00h10
  2. manque de place dans un combobox
    Par liviertlse dans le forum Composants VCL
    Réponses: 4
    Dernier message: 24/10/2003, 17h19
  3. Lien vers Mozilla Firebird : il manque les themes
    Par Nasky dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 20/10/2003, 14h24
  4. Il manque des fonctions?
    Par Gruik dans le forum Requêtes
    Réponses: 3
    Dernier message: 15/10/2003, 00h44
  5. [Kylix] Base de donnée - Manque .so
    Par pacpac dans le forum EDI
    Réponses: 2
    Dernier message: 02/07/2003, 19h31

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