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

Contribuez Discussion :

Automatiser l'ouverture d'un fichier compatible Excel depuis le Web (téléchargement)


Sujet :

Contribuez

  1. #221
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Hello,


    oui

    Bon dès que j'ai fini de tout lire et essayé de comprendre je reviens vers vous...pour surement des questions
    Mais Pat à raison faut pas parasiter...surtout si pas tout testé et sûr!!!
    En tout cas c'est vraiment super instructif ce que tu (vous faites) et ca marche toutjours nickel tu sais tout le reste
    Bon WE

  2. #222
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut
    Juste pour info itwoo, ne pas perdre trop de temps avec les handles une fois le principe compris
    car avec la référence UIAutomationClient je ne les utilise plus ‼

    Pour piloter Firefox, avec cette référence je peux déjà lister les noms et les classes des fenêtres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub ListeFenetres()
        Dim oAC As IUIAutomationCondition, oAE As IUIAutomationElement, oAEA As IUIAutomationElementArray, oCUIA As New CUIAutomation
        Set oAC = oCUIA.CreatePropertyCondition(UIA_ControlTypePropertyId, UIA_WindowControlTypeId)
                  Debug.Print vbLf, "Liste fenêtres :"
                  Set oAEA = oCUIA.GetRootElement.FindAll(TreeScope_Descendants, oAC)
        For N& = 0 To oAEA.Length - 1
            Set oAE = oAEA.GetElement(N)
            Debug.Print oAE.CurrentClassName; Tab(41); oAE.CurrentName
        Next
            Debug.Print , N; "éléments"
            Set oAC = Nothing:  Set oAE = Nothing:  Set oAEA = Nothing:  Set oCUIA = Nothing
    End Sub
    La fenêtre de téléchargement de Firefox étant une sous-fenêtre de la fenêtre principale
    n'est donc pas obligatoire dans le code car ses éléments y sont directement disponibles !

    Le bandeau de téléchargement d'Internet Explorer n'est pas une fenêtre mais une barre d'outils
    contenu dans un volet, ces deux types étant aussi récupérables via cette référence …

  3. #223
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    Bonjour Marc
    jolie ton liste fenêtre
    dommage que ca liste que les fenêtre mère je vois que tu a vraiment basculé sur uiautomation toi
    si tu sais comment faire pour lister les fenêtre enfants je serais ravi de le savoir

  4. #224
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour,

    Merci des infos
    ok ok pour les handles ca va, surement plus tard 2-3 questions mais ca va à peu près
    Pour le reste le temps de regarder tout ca (plus finir ce que je dois faire en ce moment) ca va pas être pour tout de suite mais ca va venir
    bonne semaine

  5. #225
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut
    Salut !

    Citation Envoyé par patricktoulon Voir le message
    si tu sais comment faire pour lister les fenêtre enfants je serais ravi de le savoir
    En fait cela liste déjà les deux types de fenêtres (cf ligne de code n°5 TreeScope_Descendants)
    du moment qu'elles sont visibles et gérables via la référence UI Automation Client

    Pour l'instant je n'ai testé que sous Seven et cela m'affiche bien la fenêtre principale de Firefox
    (testé avec versions 47, 48 & 49) et sa sous-fenêtre de téléchargement.

    Si tu as testé avec IE, alors relis-bien mon précédent post car le bandeau d'IE n'est pas une fenêtre,
    là il faut lister les volets ou les barres d'outils (testé sous Seven & IE9) …

    Pilotage réussi de Firefox pour les sites Euronext et Abcbourse mais uniquement via SendKeys en écriture
    car des fonctionnalités de la référence UIAutomationClient ont du mal en VBA (cela peut venir de moi aussi)
    mais j'ai lu des cas similaires dans d'autres langages et même des expériences contradictoires !

    Donc toujours en phase d'expérimentation, de ré-écriture de ma fonction grosse Bertha
    afin de tenter de simplifier au maximum la procédure de pilotage …

  6. #226
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    Bonjour Marc
    c'est quoi alors l'argument pour IE treescope......????

    je cherche mais ne trouve rien

    bien que pour IE je n'en vois pas trop l'intérêt sachant qu'avec 4 lignes de code on a dans un (do/loop) la présence ou pas du bandeau IE

    y a t il une fonction ou paramètre synchrone ou asynchrone dans uiauto ???? qui pourrait gérer une attente sans do/loop

  7. #227
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut
    C'est déjà le bon TreeScope pour mères & filles …

    Le problème est de confirmer le téléchargement comme déjà vu auparavant avec IE …
    Et je me suis aperçu qu'entre UIAutomationClient avec handle parfois il y avait un loupé (ou plusieurs d'affilés !)
    que j'avais réglé au sein d'une boucle testant si le bouton était toujours présent et ce même avec Firefox … (1)
    Puis en reprenant un essai antérieur sous Firefox dans lequel j'avais annoté 100% et pourtant sans boucle,
    le testant de nouveau sans souci alors que dans l'autre avec boucle avec un Debug confirmant parfois des loupés,
    j'ai cherché à comprendre et en suis venu à la conclusion de ne pas pointer la fenêtre par son handle
    et depuis de nouveau à 100% de réussite pour confirmer le téléchargement.
    Mais je dois tester sur une configuration différente tant côté Windows comme côté Excel …

    Non je n'ai pas vu de paramètre synchrone ou asynchrone (je n'ai pas tout lu !)
    mais il y a des évènements, je n'ai pas testé car déjà la référence UIAutomationClient
    m'a l'air de se comporter différemment des exemples lus dans d'autres langages.
    Je m'en sors donc par boucle Do … Loop avec un timeout non pas global mais par opération au cas où …

    Une fois la fenêtre du navigateur pointée, voici l'extrait de code manipulant basiquement la page Euronext :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            UIAuto "Séparateur point virgule (.csv)"
            If Application.International(xlDecimalSeparator) = "," Then UIAuto ""","""
            If Application.International(xlDateOrder) <> 1 Then UIAuto "mois/jour/année"
            UIAuto "Go"
            UIAuto "OK"
    Visualisation dans le post #179 …
    Derrière ma fonction UIAuto est actuellement un chantier de 200 lignes de code,
    une espèce de grossière IA se débrouillant selon les paramètres passés …


    (1) Pas vraiment testé avec IE car tu as raison on a déjà ce qu'il faut pour IE

    mais je testerai plus tard cette sarie de page Abcbourse avec UIAuto & IE …

  8. #228
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    bon après quelque recherches
    j'ai trouvé des fonction ou constantes intéressantes pour UIautomation
    voila mon liste fenêtre a moi avec UIautomation

    j'attire ton attention!!!! sur "treewalker","GetFirstChildElement","GetNextSiblingElement"

    je decouvre autant que toi mais je pense que dans une recursivité on pourrait sibler le badeau apres avoir determiner la bonne IEFRAME

    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
    Sub liste_les_fenetres ()
     Dim oAutomation As New CUIAutomation ' tdeclaration de l'api uiautomation
     Dim oDesktop As UIAutomationClient.IUIAutomationElement 'Reference to the root element (desktop)
     Dim oTW As UIAutomationClient.IUIAutomationTreeWalker 'utilisation de treewalker de l'api uiautomation
     Dim oItem As UIAutomationClient.IUIAutomationElement
      Set oDesktop = oAutomation.GetRootElement 'recuperation du desktop
    ' lister les fenetre avec treewalker
     Set oTW = oAutomation.ControlViewWalker
     'trouver la premiere fenetre enfant  du desktop
     Set oItem = oTW.GetFirstChildElement(oDesktop)
     Debug.Print 0 & ":  titre : " & oDesktop.CurrentName & ": classe = " & oDesktop.CurrentClassName 'affichage dans debug du resultat
     While Not oItem Is Nothing
     it = it + 1
     Debug.Print it & " : titre : " & oItem.CurrentName & ": classe = " & oItem.CurrentClassName
     Set oItem = oTW.GetNextSiblingElement(oItem)' élément suivant 
      Wend
    End Sub

  9. #229
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re et voila une premiere approche pour le wait bandeau sans api Windows avec api UIauto

    reste a ajouter le click du bouton de tes version uiauto

    c'est brouillon, mais ca fonctionne

    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
    Sub Demo3_UIauto_V_pat()
        Const ELT = "ctl00_BodyABC_Button1"
        Dim Wb As Workbook, mess As String
        T = Timer
        For Each Wb In Workbooks
            If Wb.Name Like "Cotations*.csv" Then Wb.Close False
        Next
        Set IE = CreateObject("InternetExplorer.Application")
        With IE
            .Navigate "http://www.abcbourse.com/download/historiques.aspx"
                    .Visible = True    'facultatif!!!!!!!
            While .ReadyState < 3
                mess = "IE n'etait pas ready !!!"
                If Timer - T > 9 Then GoTo Fin
            Wend
            While Not IsObject(.Document.all(ELT))
                mess = "l'object " & ELT & " n'a pas été trouvé "
                If Timer - T > 9 Then GoTo Fin
            Wend
            On Error GoTo Fin
            With .Document.all
                mess = "les elements n'ont pas pu etre mis a jours"
                .ctl00_BodyABC_strDateDeb.Value = "26/05/2015"
                .ctl00_BodyABC_strDateFin.Value = "26/05/2016"
                .ctl00_BodyABC_oneSico.Click
                .ctl00_BodyABC_txtOneSico.Value = "FR0000120222"
                .ctl00_BodyABC_dlFormat.Value = "x"
                .Item(ELT).Click
            End With
            '        .Visible = True
            mess = "relax ca va trop vite!!"
            waitbandeau
     
        End With
        Exit Sub
    Fin:
        MsgBox mess, vbCritical
    IE.Quit
    End Sub
    Sub waitbandeau()
     Dim oAutomation As New CUIAutomation ' tdeclaration de l'api uiautomation
     Dim oDesktop As UIAutomationClient.IUIAutomationElement 'Reference to the root element (desktop)
     Dim oTW As UIAutomationClient.IUIAutomationTreeWalker 'utilisation de treewalker de l'api uiautomation
     Dim oItem As UIAutomationClient.IUIAutomationElement
      Set oDesktop = oAutomation.GetRootElement 'recuperation du desktop
    ' lister les fenetre avec treewalker
     Set oTW = oAutomation.ControlViewWalker
     'trouver la premiere fenetre enfant  du desktop
    recomence:
     Set oItem = oTW.GetFirstChildElement(oDesktop)
     'Debug.Print 0 & ":  titre : " & oDesktop.CurrentName & ": classe = " & oDesktop.CurrentClassName 'affichage dans debug du resultat
     Do While Not oItem.CurrentClassName <> "Frame Notification Bar"
     it = it + 1
     'Debug.Print it & " : titre : " & oItem.CurrentName & ": classe = " & oItem.CurrentClassName
     If oItem.CurrentClassName = "IEFrame" Then Set oDesktop = oItem: GoTo recomence
      Set oItem = oTW.GetNextSiblingElement(oItem)
      Loop
    MsgBox "ok le bandeau est la!!!"
    End Sub

  10. #230
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut
    Salut Patrick !

    Le TreeWalker est utile quand on ne connait pas le modèle objet de la page sous UI Automation (différent du DOM)
    mais peut-être très long selon les niveaux de profondeur de recherche !
    Là t'as du bol car la fenêtre est directement au premier niveau derrière la racine
    et la classe du bandeau aussi au premier niveau derrière la fenêtre.
    Mieux vaut cibler directement l'élément recherché (tests sous IE9 mais je ne pense pas que cela diffère pour IE11) :

    • Si vraiment tu veux cibler le bandeau d'IE, alors comme indiqué dans le post #225 par son volet …

    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
    Sub DemoBandeauIE1()
        Dim oAC As IUIAutomationCondition, oAE As IUIAutomationElement, oIE As IUIAutomationElement, oCUIA As New CUIAutomation, D As Date
        Set oAC = oCUIA.CreatePropertyCondition(UIA_ClassNamePropertyId, "IEFrame")
    'ou Set oAC = oCUIA.CreateAndCondition(oCUIA.CreatePropertyCondition(UIA_ControlTypePropertyId, UIA_WindowControlTypeId), _
                  oCUIA.CreatePropertyCondition(UIA_NamePropertyId, "Téléchargement des cotations pour - Windows Internet Explorer"))
        Set oIE = oCUIA.GetRootElement.FindFirst(TreeScope_Children, oAC)
         If oIE Is Nothing Then
            MsgBox "Fenêtre absente !", vbExclamation
         Else
                  D = Now + 10 / 86400
            Set oAC = oCUIA.CreateAndCondition(oCUIA.CreatePropertyCondition(UIA_ControlTypePropertyId, UIA_PaneControlTypeId), _
                                               oCUIA.CreatePropertyCondition(UIA_ClassNamePropertyId, "Frame Notification Bar"))
            Do
                   If Now > D Then Exit Do
                   Set oAE = oIE.FindFirst(TreeScope_Children, oAC)
            Loop While oAE Is Nothing
                    If oAE Is Nothing Then MsgBox "Timeout !", vbExclamation Else MsgBox "Bandeau présent !", vbInformation
            Set oAC = Nothing:  Set oAE = Nothing:  Set oIE = Nothing:  Set oCUIA = Nothing
         End If
    End Sub
    Les lignes n°4 & 5 représentent une alternative en cas de plusieurs fenêtres d'IE de trouver la bonne par son type et son nom …

    Lignes n°11 & 12 : la condition de la classe seule peut suffire, là j'ai combiné avec une condition de type volet …


    • … Ou encore comme précisé dans ce post #225 par sa barre d'outils …

    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
    Sub DemoBandeauIE2()
        Dim oAC As IUIAutomationCondition, oAE As IUIAutomationElement, oIE As IUIAutomationElement, oCUIA As New CUIAutomation, D As Date
        Set oAC = oCUIA.CreatePropertyCondition(UIA_ClassNamePropertyId, "IEFrame")
    'ou Set oAC = oCUIA.CreateAndCondition(oCUIA.CreatePropertyCondition(UIA_ControlTypePropertyId, UIA_WindowControlTypeId), _
                  oCUIA.CreatePropertyCondition(UIA_NamePropertyId, "Téléchargement des cotations pour - Windows Internet Explorer"))
        Set oIE = oCUIA.GetRootElement.FindFirst(TreeScope_Children, oAC)
         If oIE Is Nothing Then
            MsgBox "Fenêtre absente !", vbExclamation
         Else
                  D = Now + 10 / 86400
            Set oAC = oCUIA.CreateAndCondition(oCUIA.CreatePropertyCondition(UIA_ControlTypePropertyId, UIA_ToolBarControlTypeId), _
                                               oCUIA.CreatePropertyCondition(UIA_ClassNamePropertyId, "DirectUIHWND"))
    ' ou à la place de la classe le nom :      oCUIA.CreatePropertyCondition(UIA_NamePropertyId, "Barre de notification"))
            Do
                   Set oAE = oIE.FindFirst(TreeScope_Descendants, oAC)
            Loop While oAE Is Nothing And Now < D
                    If oAE Is Nothing Then MsgBox "Timeout !", vbExclamation Else MsgBox "Bandeau présent !", vbInformation
            Set oAC = Nothing:  Set oAE = Nothing:  Set oIE = Nothing:  Set oCUIA = Nothing
         End If
    End Sub
    Comparer la ligne de code n°15 avec celle de la première démonstration !


    • Mais comme le laisse supposer l'extrait de code du post #227 (Firefox ou IE : même combat !),
    trouver le bandeau n'est pas nécessaire car le bouton peut directement être recherché dans la fenêtre UI Automation,
    le but final étant de cliquer sur ce 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
    18
    19
    Sub DemoBoutonIE()
        Dim oAC As IUIAutomationCondition, oAE As IUIAutomationElement, oIE As IUIAutomationElement, oCUIA As New CUIAutomation, D As Date
        Set oAC = oCUIA.CreatePropertyCondition(UIA_ClassNamePropertyId, "IEFrame")
    'ou Set oAC = oCUIA.CreateAndCondition(oCUIA.CreatePropertyCondition(UIA_ControlTypePropertyId, UIA_WindowControlTypeId), _
                  oCUIA.CreatePropertyCondition(UIA_NamePropertyId, "Téléchargement des cotations pour - Windows Internet Explorer"))
        Set oIE = oCUIA.GetRootElement.FindFirst(TreeScope_Children, oAC)
         If oIE Is Nothing Then
            MsgBox "Fenêtre absente !", vbExclamation
         Else
                  D = Now + 10 / 86400
            Set oAC = oCUIA.CreateAndCondition(oCUIA.CreatePropertyCondition(UIA_ControlTypePropertyId, UIA_ButtonControlTypeId), _
                                               oCUIA.CreatePropertyCondition(UIA_NamePropertyId, "Ouvrir"))
            Do
                   Set oAE = oIE.FindFirst(TreeScope_Descendants, oAC)
            Loop While oAE Is Nothing And Now < D
                    If oAE Is Nothing Then MsgBox "Timeout !", vbExclamation Else MsgBox "Bouton présent !", vbInformation
            Set oAC = Nothing:  Set oAE = Nothing:  Set oIE = Nothing:  Set oCUIA = Nothing
         End If
    End Sub
    Les conditions de recherche des lignes de code n°11 & 12 sont pour un bouton nommé "Ouvrir"
    mais si l'élément recherché est le seul ou le premier dans la structure de l'objet racine de la recherche à porter ce nom
    alors la condition seule sur son nom est suffisante comme dans l'extrait de code du post #227 …

  11. #231
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    oul

  12. #232
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    oulah c'est chaud to truc

    bon je vais regarder tout ca

    en fait on a un soucis tout les deux c'est que notre démarche diverge toujours sur le même point c'est que tu code aux cas par cas

    tandis que moi j'essai de rendre générique le code

    en effet tu a besoins du titre "Téléchargement des cotations pour - Windows Internet Explorer" pour bien sibler la fenêtre en cas de multiples fenêtre "ieframe"

    ce que je cherche a faire moi c'est cibler les "IEFrame" trouver celle qui a son firstchildren "frame notification bar" effectivement cela peut être plus long mais de quelque centième
    on a pas toujours 36 fenêtre IE affiché a l'écran
    cet partie remplacerait les (do/loop) sur la présence du handle du bandeau

    principe

    do
    recherche de tout "ieframe"--> sous recherche firstchild "notification bar"__> sortie de do puis clik bouton (ouvrir/enregistrer)le tout dans un do /loop parent pour refaire le tour tant que le "notificatio..." n'est pas trouvé

    voila ce que je cherche a faire de cette manière on a plus besoins d'apis Windows du tout et on a un code générique pour IE

    mon projet c'est celui la
    bon c'est vrai que je me suis mis a uiautomation bien plus tard que toi n'y voyant pas trop d'intérêt car avec les apis je n'est aucun soucis avec et de toute les façons mais c'est intéressant de sortir de son chemin et visiter les pistes des autres

  13. #233
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    je crois que l'on est entrain de s'embeter pour rien

    je revien un peu sur les model uiauto de base
    dans la sub on se sert de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set oIUIAIP = oCUIA.ElementFromHandle(ByVal hwndIEedge).FindFirst(TreeScope_Subtree, _
       oCUIA.CreatePropertyCondition(UIA_NamePropertyId, "Ouvrir")).GetCurrentPattern(UIA_InvokePatternId)
        oIUIAIP.Invoke
    pour le bouton


    comme on a pas besoins des apis pour le handle ("IE.hWnd")on peut faire simplement une boucle d'attente sur la notification bar par le children de IE.hwnd non??

  14. #234
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut
    C'est pas faux pour tes deux posts !

    Sauf que tu utilises juste la référence UIAutomationClient pour valider le téléchargement
    tandis que moi c'est pour piloter entièrement Firefox ou IE via cette référence et pas forcément un navigateur !

    Je me suis intéressé à cette référence pas tant pour IE mais surtout pour Firefox !
    Au début je suis passé par les handles mais j'ai eu des loupés aléatoires pour valider le téléchargement,
    je me demande même si ce n'est pas la difficulté rencontrée par David sous Windows 10 …

    Si tu regardes l'extrait de code du post #227 pour Euronext sous Firefox, dans la dernière ligne
    "OK" correspond au bouton "Ouvrir" d'IE et donc une fois la fenêtre pointée au début de l'utilisation
    de cette référence, j'utilise uniquement le nom d'un élément sans préciser son type, on ne peut pas faire plus simple !
    Et après le click (implicite) sur le bouton "Go", je ne demande pas l'attente de la fenêtre de téléchargement
    mais juste un click sur le bouton OK de la fenêtre de téléchargement
    car une fois ce bouton disponible il est intégré à la fenêtre initiale de la page Euronext !
    C'est un peu comme en utilisant selenium-vba mais en plus simple.

    J'ai toutefois conservé la possibilité de pointer sur le bandeau d'IE ou sur la sous-fenêtre de téléchargement de Firefox
    si au début du pilotage au lieu de rester sur la fenêtre initiale je pointe sur l'élément regroupant les éléments de la page
    (à savoir l'élément de type document pour Firefox ou l'élément volet avec pour nom celui de l'onglet du navigateur pour IE)
    car cet élément est d'un niveau bien plus profond que le bandeau ou la sous-fenêtre …

    Donc je laisse le choix : un débutant ne se prendra pas trop la tête (cf extrait de code du post #227)
    tandis qu'une personne expérimentée pourra choisir de préciser certains éléments,
    de regrouper des éléments d'un même type dans une collection, etc …

  15. #235
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Hello,

    Désolé du long silence mais j'ai eu des empéchements...

    Tout d'abord je ne suis pas encore arrivé à la fin donc je ne fais pas de commentaires, comme vous l'indiquez je suis passé à la suite, à la modernité mais suis en retard

    Pour info si vous voulez j'ai récupéré sur le net un code pour faire un Treeview récursif (c'est 5 lignes de code ) et je l'ai mis en tests pour voir ce qu'il se passe à toutes les étapes et voir si cela bloque, ca ne bloque pas depuis un bon moment donc je ne peux pas vous dire avec certitude d'où cela vient (sans le treeview, les handles en liste ne sont pas toujours trés clair pour voir qui fait quoi, et expliquer correctement).
    Pour info juste testé le treeview sur findwindow, les handles car ca j'ai compris (mais sans obstination toutefois ), pas encore sur la suite UIautomation en cours de lecture!!!

    A+

  16. #236
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut


    Salut !

    T'inquiète, moi aussi je n'ai eu guère de temps ces deux derniers mois à consacrer à UI Automation …

  17. #237
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut news
    Hello Marc,

    Côté Findwindow mis tout un tas de détecteur en cas d'erreur et bien figure toi que rien à faire ca marche pour le moment à chaque fois le code Davido/Pat...ca va bien venir!!!par contre je ne travaille pas dessus du tout.

    Houlala UIAutomation encore tout un tas de truc à comprendre!!!la fin n'est pas en vue mais je crois que cela sera plus rapide de te poser sous peu des questions...mais en ce moment suis toujours parasité par les droites de régression!!!

    bon rdv bientôt

  18. #238
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    Bonjour itwoo

    cote findwindow :comment il faut te le dire ?? de le laisser tomber !!!!! tu cherche encore alors que l'on a apporté sous diverses formes Marc et moi le moyen de taper dans le mille

    marc dans la discutions te montre comment on peut avoir le handle du bandeau sans findwindow surtout avec uiautomation d'ailleurs on en a même plus besoins je sais plus ou

    je crois que la méthode de marc c'est avec l'api getwindowtop ou quelque chose comme ca il faut rechercher

    prends une grande inspiration et oublie findwindow c'est bon pour les année précédentes hihihihihi quand on tâtonnaient sinon dans un an tu sera encore la a essayer de comprendre ce qui

    sera considéré comme méthode obsolète pour nous et donc certainement plus de suivi

    et de toute façon si je ne me trompe pas (je suis pas sur ca en ce momment) l'api getnextwindow sert a chercher les suivante et aussi les enfant avec l'indice "5"
    donc
    H1=ie.hwnd pour le handle IE

    getnextwindow(H1) pour le bandeau qui est le premier enfant dans la hierarchie des handle contenu dans IE.hwnd
    parti de la je comprends pas pourquoi tu persiste a utiliser findwindow


    Declare Function GetNextWindow Lib "user32" Alias "GetWindow" ( _
    ByVal hwnd As Long, _
    ByVal wFlag As Long) As Long
    Versions :
    . Windows 95/98 : Oui
    . Windows NT : A partir de 3.1
    . Windows 2000/XP : Oui
    Description :
    Cette fonction permet de connaître la fenêtre suivante ou précédente de la fenêtre active (fonctionne également pour les fenêtres fille d'une MDI). Equivalent de ce que peut donner un [ALT][TAB] (ou [CTRL][TAB] dans le cas de MDI).
    hwnd est le handle de la fenêtre de départ.
    wFlag est une constante du tableau ci-dessous (en gros défini le sens de la recherche).

    Constante Valeur Définition
    GW_HWNDNEXT 2 Définition de la fenêtre suivante.
    GW_HWNDPREV 3 Définition de la fenêtre précédente.





  19. #239
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour Pat,

    Mais non Pat ne t'inquiéte pas je ne suis plus sur les API et findwindow et j'espère avoir compris
    C'était juste pour dire que ca marchait ton findwindow (enfin ici du moins, et que si ca ne marche pas j'ai mis un détecteur pour voir pourquoi, enfin j'espère)

    Pour UIAutomation je suis dessus (ca marche aussi mais pour le moment en cours d'étude car c'est flou) mais c'est vrai qu'à chaque fois faut tout apprendre et ca prend du temps!!!

    D'ailleurs pour le moment tout marche partout...c'est génial si vous saviez les progrés faits grâce à vous INCROYABLE, merci

    Tu t'y connais toi sur les graphiques et droites de régression (si oui je veux bien un petit coup de main car là par contre je séche totalement sur ma discussion)?

    a+

  20. #240
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut UIAutomation
    Bonjour,

    Pour le moment ca suit plus ou moins bien ce que vous avez fait

    par contre s'il fallait le refaire impossible...Pouvez vous m'expliquer le point suivant svp:
    où avez vous trouvez tout ca (je n'arrive pas à faire le treeview avec UIAutomation sur H pour retrouver les éléments et en plus Set oELMT= est vide dans variables locales!!!:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim oELMT As IUIAutomationElement, oIPAT As IUIAutomationInvokePattern, oCUIA As New CUIAutomation
     
    set oELMT = où trouver le chemin ???

    a+

Discussions similaires

  1. Forcer l'ouverture d'un fichier avec Excel
    Par Cda01 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/12/2011, 15h47
  2. [XL-2003] Ouverture d'un fichier par excel en 3 exemplaires
    Par basto dans le forum Excel
    Réponses: 1
    Dernier message: 25/08/2009, 17h05
  3. ouverture d'un fichier avec excel sous vs.net 2003
    Par lesultan2007 dans le forum VB.NET
    Réponses: 2
    Dernier message: 29/07/2009, 15h46
  4. Telecharger un fichier excel depuis le web via PERL
    Par ptimos93800 dans le forum Web
    Réponses: 3
    Dernier message: 19/03/2009, 18h38
  5. [vbexcel]automatiser l'ouverture d'un fichier
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/12/2005, 17h33

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