Risolto Frame Notification Bar UIAtomation

Danjlor

Utente junior
1 Febbraio 2018
45
8
MILANO
2013
5
Per intercettare la Frame Notification bar classica di downlaod file da internet Explorer uso questo codice:

Visual Basic:
Rem ----------------------------------------------------------------------------------------------
Sub Salva_File_FNB()
Rem ----------------------------------------------------------------------------------------------
Dim IUI_h As LongPtr
Dim IUI_h_NB As LongPtr
Dim IUI_Obj As IUIAutomation
Dim IUI_Elem As IUIAutomationElement
Dim IUI_Cond As IUIAutomationCondition
Dim IUI_Elementi As IUIAutomationElementArray
Dim IUI_Elemento As IUIAutomationElement
Dim IUI_InvokePattern As IUIAutomationInvokePattern

'RECUPERA INDIRIZZO FINESTRA DEL BROWSER
 IUI_h = IE.hWnd
'ATTENDE LA COMPARSA DELLA BARRA DI NOTIFICA
 Sleep 5000
 Do
   'RECUPERA INDIRIZZO DELLA "Frame Notification Bar"
    IUI_h_NB = FindWindowEx(IUI_h, 0, "Frame Notification Bar", vbNullString)
    If IUI_h_NB <> 0 Then Exit Do
    DoEvents
 Loop
'HANDLE PER GESTIRE BARRA DI NOTIFICA
 Set IUI_Obj = New CUIAutomation
 Set IUI_Elem = IUI_Obj.ElementFromHandle(ByVal IUI_h_NB)
'CERCA PULSANTE SALVA
 Set IUI_Cond = IUI_Obj.CreatePropertyCondition(UIA_NamePropertyId, "Salva")
'AGGANCIA IL PULSANTE E CLICCA
 Do
    Set IUI_Elemento = IUI_Elem.FindFirst(TreeScope_Subtree, IUI_Cond)
    Sleep 200
    DoEvents
 Loop While IUI_Elemento Is Nothing
 Set IUI_InvokePattern = IUI_Elemento.GetCurrentPattern(UIA_InvokePatternId)
     IUI_InvokePattern.Invoke
     Sleep 3000
'CERCA TUTTI I PULSANTI E LI AGGANCIA
 Set IUI_Cond = IUI_Obj.CreatePropertyCondition(UIA_ControlTypePropertyId, UIA_ButtonControlTypeId)
 Set IUI_Elementi = IUI_Elem.FindAll(TreeScope_Subtree, IUI_Cond)
'ULTIMO ELEMENTO = CHIUDI
 Do
    Set IUI_Elemento = IUI_Elementi.GetElement(IUI_Elementi.length - 1)
    Set IUI_InvokePattern = IUI_Elemento.GetCurrentPattern(UIA_InvokePatternId)
        IUI_InvokePattern.Invoke
        Sleep 200
        DoEvents
 Loop While IUI_Elemento Is Nothing
End Sub
Non riesco a intercettare il testo "Apri o salva...." da cui recupero il nome del file da scaricare che, ovviamente, cambia sempre.
Non esiste un sito con esempi o definizione della UIA_TextControlTypeId?
 

alfrimpa

VBA Expert
Supermoderatore
Expert
18 Dicembre 2015
21.866
1.745
66
Napoli
2019 Pro Plus
450
Ho spostato la discussione nella sezione Outlook perchè l'avevi postata in "Excel VBA e macro" ma ritengo che la tua domanda non abbia nulla a che fare con Excel (almeno nel codice che hai esposto non vedo nessuna istruzione del VBA di Excel).
 

Danjlor

Utente junior
1 Febbraio 2018
45
8
MILANO
2013
5
Ho spostato la discussione nella sezione Outlook perchè l'avevi postata in "Excel VBA e macro" ma ritengo che la tua domanda non abbia nulla a che fare con Excel (almeno nel codice che hai esposto non vedo nessuna istruzione del VBA di Excel).
Ciao, in pratica ho omesso il codice che gestisce da Excel la pagina internet Explorer e mi apre la finestra
 

Danjlor

Utente junior
1 Febbraio 2018
45
8
MILANO
2013
5
Per chi ne avesse bisogno il codice è questo

Visual Basic:
Dim Frame_NBar_Panel As IUIAutomationElement
Dim Notification_Bar_Text As IUIAutomationElement
Dim Notification_Toolbar As IUIAutomationElement

Dim ControlName As IUIAutomationCondition
Dim ControlType As IUIAutomationCondition
Dim NameAndType As IUIAutomationCondition

'CERCA LA "Notification tool bar" UNA CHILD DEL FRAME_NBAR_PANEL
'Name:       "Notification" (Notifica)
'ControlType: UIA_ToolBarControlTypeId
 Set ControlName = IUI_Automation.CreatePropertyCondition(UIA_NamePropertyId, "Notifica")
 Set ControlType = IUI_Automation.CreatePropertyCondition(UIA_ControlTypePropertyId, UIA_ToolBarControlTypeId)
 Set NameAndType = IUI_Automation.CreateAndCondition(ControlName, ControlType)
     Do
        Set Notification_Toolbar = Frame_NBar_Panel.FindFirst(TreeScope_Children, NameAndType)
        Sleep 200
        DoEvents
     Loop While Notification_Toolbar Is Nothing
    
'CERCA L'ELEMENTO "Notification tool bar text "
'Name:          "Notification bar Text" (Testo barra di notifica)
'ControlType:    UIA_TextControlTypeId
'Value.Value:   "Aprire o salvare ... da.....?"
 Set ControlName = IUI_Automation.CreatePropertyCondition(UIA_NamePropertyId, "Testo barra di notifica")
 Set ControlType = IUI_Automation.CreatePropertyCondition(UIA_ControlTypePropertyId, UIA_TextControlTypeId)
 Set NameAndType = IUI_Automation.CreateAndCondition(ControlName, ControlType)
 Set Notification_Bar_Text = Frame_NBar_Panel.FindFirst(TreeScope_Descendants, NameAndType)
     Notification_Bar_TextString = Notification_Bar_Text.GetCurrentPropertyValue(UIA_ValueValuePropertyId)
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!