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

Contribuez Discussion :

Introduction aux fonctions d'accessibilité


Sujet :

Contribuez

  1. #1
    Responsable Access

    Introduction aux fonctions d'accessibilité
    Bonjour à tous,

    Vous pouvez sur cette discussion commenter l'article suivant :
    OFFICE : Introduction aux fonctions d'accessibilité

    L'avez vous lu?
    Le trouvez vous intéressant?
    Commentaires, critiques, remerciement, ... tout est bienvenu.

    Pensez également à ajouter une note. ("Noter la discussion" en haut à droite)
    Votre avis nous intéresse.




    Retrouver les meilleurs cours et tutoriels pour apprendre Microsoft Office

  2. #2
    Responsable Access

    Un exemple d'utilisation des fonctions masquées pour activer un onglet du ruban :
    Code à mettre dans un module :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
    Public Function SetRibbonTabFocus(pTab As String) As Boolean
    Dim oChild As Variant
    Dim oRibbon As IAccessible
    Dim oTab As IAccessible
    Const ROLE_SYSTEM_CLIENT = &HA&
    Const ROLE_SYSTEM_WINDOW = &H9&
    Const ROLE_SYSTEM_PAGETAB = &H25&
    Const ROLE_SYSTEM_PROPERTYPAGE = &H26&
    Const ROLE_SYSTEM_PAGETABLIST = &H3C&
    On Error GoTo gestion_erreurs
    ' Ribbon Tool Bar
    Set oRibbon = CommandBars("ribbon")
    ' Ribbon Window
    Set oRibbon = oRibbon.accChild(ByVal 1&)
    ' Ribbon Client
    Set oRibbon = FindChildByRoleOrName(oRibbon, , ROLE_SYSTEM_CLIENT)
    ' Ribbon Client Window
    Set oRibbon = FindChildByRoleOrName(oRibbon, , ROLE_SYSTEM_WINDOW)
    ' Ribbon Client Window Client
    Set oRibbon = FindChildByRoleOrName(oRibbon, , ROLE_SYSTEM_CLIENT)
    ' Ribbon Client Window Client Window
    Set oRibbon = FindChildByRoleOrName(oRibbon, , ROLE_SYSTEM_WINDOW)
    ' Ribbon Property page
    Set oRibbon = FindChildByRoleOrName(oRibbon, , ROLE_SYSTEM_PROPERTYPAGE)
    ' Ribbon Tabs list
    Set oRibbon = FindChildByRoleOrName(oRibbon, , ROLE_SYSTEM_PAGETABLIST)
    ' Ribbon Tabs list Client
    Set oRibbon = FindChildByRoleOrName(oRibbon, , ROLE_SYSTEM_CLIENT)
    ' Tab
    Set oTab = FindChildByRoleOrName(oRibbon, pTab, ROLE_SYSTEM_PAGETAB)
    ' Click Tab
    Call oTab.accDoDefaultAction(ByVal 0&)
    ' True if OK
    SetRibbonTabFocus = True
    Exit Function
    gestion_erreurs:
    SetRibbonTabFocus = False
    End Function
     
    ' Fonction privée pour rechercher d'un objet accessible à partir de son parent, son role et son nom
    Private Function FindChildByRoleOrName(pParent As IAccessible, Optional pChildName As String = "*", Optional pChildRole As String = "*") As IAccessible
    Dim lName As String, lRole As Long
    Dim oChild As IAccessible
    Const NAVDIR_FIRSTCHILD = &H7&
    Const NAVDIR_NEXT = &H5&
    On Error GoTo gestion_erreurs
    Set oChild = pParent.accNavigate(NAVDIR_FIRSTCHILD, ByVal 0&)
    If pChildName <> "*" Then lName = oChild.accName(ByVal 0&)
    If pChildRole <> "*" Then lRole = oChild.accRole(ByVal 0&)
    If lRole Like pChildRole And lName Like pChildName Then
        Set FindChildByRoleOrName = oChild
        Exit Function
    End If
    Do
        Set oChild = oChild.accNavigate(NAVDIR_NEXT, ByVal 0&)
        If pChildName <> "*" Then lName = oChild.accName(ByVal 0&)
        If pChildRole <> "*" Then lRole = oChild.accRole(ByVal 0&)
        If lRole Like pChildRole And lName Like pChildName Then
            Set FindChildByRoleOrName = oChild
            Exit Do
        End If
    Loop
    Exit Function
    gestion_erreurs:
    Set FindChildByRoleOrName = Nothing
    End Function


    Utilisation : Pour par exemple activer l'onglet Accueil :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Call SetRibbonTabFocus("Accueil")

  3. #3
    Membre régulier
    Problèmes avec SDK 7.1
    Bonjour,
    Merci pour le module Intro aux fcts Accessibilité.
    J'ai installé SDK 7.1 (sous Système 7 et Office 2007)
    En essayant de l'implémenter j'ai quelques remarques et questions:
    Après recherches j'ai finalement trouvé que les modules AccExplorer32.exe, AccEvent32.exe, Inspect32.exe devraient se trouver dans la bibliothèque bin de µS SDK. En fait ils n'y sont pas.
    On trouve - sauf erreur de ma part, mauvaise installation ou autre
    AccEvent.exe, Inspect.exe
    J'ai cru comprendre que AccExplorer32.exe est remplacé par UISPY (je l'ai trouvé sur :http://andrewtokeley.net/archive/200...d-it-here.aspx

  4. #4
    Responsable Access

    bjr,

    il faut que je remette à jour les liens

    le lien que je donne ne contient que la doc, pas les outils
    je ne trouve plus de liens vers les exécutables seuls

  5. #5
    Membre régulier
    Bjr,
    Je n'ai pas suivi tous les liens, mais l'impression que j'ai est que AccExplorer32.exe n'existe plus, remplacé par UISPY. Une discussion existe sur le site de µS http://msdn.microsoft.com/en-us/libr.../ms727247.aspx (les autres marchent en 32 bits, je ne sais pas s'il existe une version 64.)
    Le fonctionnement de UISPY semble un peu différent de AccExplorer32, je n'ai pas vu comment faire un drag & drop comme expliqué ds le tuto.

  6. #6
    Expert éminent
    Cliquer sur une PJ dans OUTLOOK
    Bonjour,

    Pour Commencer j'ai trouvé une source pour AccExplorer32 là https://github.com/blackrosezy/gui-inspect-tool.

    Alors je souhaiterai utiliser ces fonctions d'accessibilité pour cliquer sur la première PIECE JOINTE d'un Email dans OUTLOOK 2010 lorsque l'on est en Mode EXPLORATEUR, avec le volet de lecture affiché.

    Le mail concerné sera forcément celui sélectionné



    Je parviens à obtenir une instance avec SetAccObjFromPosition et à lancer l'action par défaut.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function DisplayElementUnderMouse()
        Dim oAcc As clAccessibility
        ' Nouvel objet
        Set oAcc = New clAccessibility
        ' Récupère l'objet sous le curseur de la souris
        ' Inscrit le nom et le rôle de l'objet sur la première cellule de la première feuille
        If oAcc.SetAccObjFromPosition Then
            Debug.Print oAcc.Name & " : " & oAcc.RoleText
        Else
            Debug.Print ""
        End If
        oAcc.DoSelect
        oAcc.DoDefaultAction
    End Function


    Ce que j'aimerai c'est Trouver cet objet sans la souris avec son nom, celui de la Pièce jointe (ici "ScannedImage-6.jpg (402 Ko)")
    et ensuite juste cliquer dessus (qui n'est pas l'action par defaut)


    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
    Function ClickPJOutlook()
        Dim lCpt As Long
        Dim ltexte As String
        Dim oAcc As clAccessibility
        ' Nouvel objet
        Set oAcc = New clAccessibility
        'oAcc.SetAccObjFrom OBJID_CLIENT
     
        Dim hwnd As Long, FenOutlook As String
        FenOutlook = Application.ActiveExplorer.caption
        On Error Resume Next
     
        If FenOutlook <> "" Then hwnd = activer_application.FindWindow(vbNullString, FenOutlook)
        oAcc.SetAccObjFromHwnd hwnd, OBJID_WINDOW
     
     
        Set oAcc = oAcc.FindChild("ScannedImage-6.jpg (402 Ko)", clAccessibility.ROLE_SYSTEM_LISTITEM, , , , True)
        If Not oAcc Is Nothing Then
            oAcc.DoDefaultAction
        End If
    End Function



    mais cela ne fonctionne pas ! je n'arrive pas à trouver la bonne syntaxe ou méthode.


  7. #7
    Responsable Access

    Bonjour,

    Oliv-, ta syntaxe semble correcte.
    Il a dû y a voir un changement depuis que j'ai écrit l'article.

    Essaye de modifier le type de lAccObj dans PrivFindChild du module clAccessibility :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Dim lAccObj As IAccessible

    au lieu de :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Dim lAccObj As Object

    Sur mon PC ça a fonctionné.

  8. #8
    Expert éminent
    Salut
    Merci beaucoup je vais tester la semaine prochaine.
    Est ce que on peut lancer autre chose que le doubleclic par défaut ?