Skip to main content

VBA - UI Automation Sample code:


VBA Reference to be added:




VBA - UI Automation Project sample code
Dim MyElement As UIAutomationClient.IUIAutomationElement
Dim MyElement1 As UIAutomationClient.IUIAutomationElement
'Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Enum oConditions
   eUIA_NamePropertyId
   eUIA_AutomationIdPropertyId
   eUIA_ClassNamePropertyId
   eUIA_LocalizedControlTypePropertyId
End Enum
Sub Test()
Dim AppObj As UIAutomationClient.IUIAutomationElement
Dim oInvokePattern As UIAutomationClient.IUIAutomationInvokePattern
Dim oAutomation As New CUIAutomation ' the UI Automation API\
Dim oPattern As UIAutomationClient.IUIAutomationLegacyIAccessiblePattern
Set AppObj = WalkEnabledElements("BTB Portal 3.0 KA")
Set MyElement = AppObj.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_ClassNamePropertyId, "Frame Tab"))
Set MyElement1 = MyElement.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_NamePropertyId, "BTB Portal 3.0 KA - Internet Explorer"))
Set MyElement = MyElement1.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_ClassNamePropertyId, "Shell DocObject View"))
Set MyElement1 = MyElement.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_NamePropertyId, "http://ka.uhc.com/btb/"))
Set MyElement = MyElement1.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_NamePropertyId, "Silverlight Control"))
Set MyElement1 = MyElement.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_AutomationIdPropertyId, "tabMain"))
Set MyElement = MyElement1.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_NamePropertyId, "Search"))
Set MyElement1 = MyElement.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_AutomationIdPropertyId, "tabFindMain"))
Set MyElement = MyElement1.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_NamePropertyId, "Plan Search"))
Set MyElement1 = MyElement.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_AutomationIdPropertyId, "txtPolicyNumber"))
Set oPattern = MyElement1.GetCurrentPattern(UIA_LegacyIAccessiblePatternId)
    
    MsgBox "Member ID - " & oPattern.CurrentValue
End Sub
Sub ClickOnceInstaller()
Dim AppObj As UIAutomationClient.IUIAutomationElement
Dim oInvokePattern As UIAutomationClient.IUIAutomationInvokePattern
Dim oAutomation As New CUIAutomation ' the UI Automation API\
Dim oPattern As UIAutomationClient.IUIAutomationLegacyIAccessiblePattern
Set AppObj = oAutomation.GetRootElement.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_AutomationIdPropertyId, "TrustManagerPromptUI"))
Set MyElement = AppObj.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_AutomationIdPropertyId, "tableLayoutPanelOuter"))
Set MyElement1 = MyElement.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_AutomationIdPropertyId, "tableLayoutPanelButtons"))
Set MyElement = MyElement1.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_AutomationIdPropertyId, "btnCancel"))
Set oInvokePattern = MyElement.GetCurrentPattern(UIAutomationClient.UIA_InvokePatternId)
oInvokePattern.Invoke
Set MyElement1 = MyElement.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_NamePropertyId, "http://ka.uhc.com/btb/"))
Set MyElement = MyElement1.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_NamePropertyId, "Silverlight Control"))
Set MyElement1 = MyElement.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_AutomationIdPropertyId, "tabMain"))
Set MyElement = MyElement1.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_NamePropertyId, "Search"))
Set MyElement1 = MyElement.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_AutomationIdPropertyId, "tabFindMain"))
Set MyElement = MyElement1.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_NamePropertyId, "Plan Search"))
Set MyElement1 = MyElement.FindFirst(TreeScope_Children, PropCondition(oAutomation, eUIA_AutomationIdPropertyId, "txtPolicyNumber"))
Set oPattern = MyElement1.GetCurrentPattern(UIA_LegacyIAccessiblePatternId)
    
    MsgBox "Member ID - " & oPattern.CurrentValue
End Sub
Function PropCondition(UiAutomation As CUIAutomation, Prop As oConditions, Requirement As String) As UIAutomationClient.IUIAutomationCondition
Select Case Prop
    Case 0
        Set PropCondition = UiAutomation.CreatePropertyCondition(UIAutomationClient.UIA_NamePropertyId, Requirement)
    Case 1
        Set PropCondition = UiAutomation.CreatePropertyCondition(UIAutomationClient.UIA_AutomationIdPropertyId, Requirement)
    Case 2
        Set PropCondition = UiAutomation.CreatePropertyCondition(UIAutomationClient.UIA_ClassNamePropertyId, Requirement)
    Case 3
        Set PropCondition = UiAutomation.CreatePropertyCondition(UIAutomationClient.UIA_LocalizedControlTypePropertyId, Requirement)
End Select
End Function
Function WalkEnabledElements(strWindowName As String) As UIAutomationClient.IUIAutomationElement
    Dim oAutomation As New CUIAutomation
    Dim condition1 As UIAutomationClient.IUIAutomationCondition
    Dim condition2 As UIAutomationClient.IUIAutomationCondition
    Dim walker As UIAutomationClient.IUIAutomationTreeWalker
    Dim element As UIAutomationClient.IUIAutomationElement
    Set walker = oAutomation.ControlViewWalker
    Set element = walker.GetFirstChildElement(oAutomation.GetRootElement)
    Do While Not element Is Nothing
        Debug.Print element.CurrentName
        If InStr(1, element.CurrentName, strWindowName) > 0 Then
            Set WalkEnabledElements = element
            Exit Function
        End If
        Set element = walker.GetNextSiblingElement(element)
    Loop
End Function
Function GetElement(elementalist As UIAutomationClient.IUIAutomationElement)
On Error Resume Next
Dim oAutomation As New CUIAutomation
    Dim walker As UIAutomationClient.IUIAutomationTreeWalker
    Set walker = oAutomation.ControlViewWalker
    Dim element1 As UIAutomationClient.IUIAutomationElementArray
    Dim element2 As UIAutomationClient.IUIAutomationElement
    Dim childtree As UIAutomationClient.TreeScope
    Debug.Print elementalist.CurrentName
    Dim condition1 As UIAutomationClient.IUIAutomationCondition
    Set condition1 = oAutomation.CreateTrueCondition
    Set element1 = elementalist.FindAll(TreeScope_Children, condition1)
    DoEvents
    If element1.Length <> 0 Then
        Set element2 = elementalist.FindFirst(TreeScope_Children, condition1)
    End If
    Do While Not element2 Is Nothing
        Dim oPattern As UIAutomationClient.IUIAutomationLegacyIAccessiblePattern
        Set oPattern = element2.GetCurrentPattern(UIA_LegacyIAccessiblePatternId)
        Debug.Print element2.CurrentName & "|" & oPattern.CurrentValue
            If oPattern.CurrentName = "Notification" Then
                Set MyElement = element2
                Exit Function
            End If
        Debug.Print element2.CurrentClassName
        Debug.Print element2.CurrentAutomationId
        GetElement element2
        Debug.Print element2.CurrentName
        If Not MyElement Is Nothing Then Exit Function
        Set element2 = walker.GetNextSiblingElement(element2)
    Loop
End Function
Function GetElement1(elementalist As UIAutomationClient.IUIAutomationElement)
On Error Resume Next
Dim oAutomation As New CUIAutomation
    Dim walker As UIAutomationClient.IUIAutomationTreeWalker
    Set walker = oAutomation.ControlViewWalker
    Dim element1 As UIAutomationClient.IUIAutomationElementArray
    Dim element2 As UIAutomationClient.IUIAutomationElement
    Dim childtree As UIAutomationClient.TreeScope
    Debug.Print elementalist.CurrentName
    Dim condition1 As UIAutomationClient.IUIAutomationCondition
    Set condition1 = oAutomation.CreateTrueCondition
    Set element1 = elementalist.FindAll(TreeScope_Children, condition1)
    DoEvents
    If element1.Length <> 0 Then
        Set element2 = elementalist.FindFirst(TreeScope_Children, condition1)
    End If
    Do While Not element2 Is Nothing
        Dim oPattern As UIAutomationClient.IUIAutomationLegacyIAccessiblePattern
        Set oPattern = element2.GetCurrentPattern(UIA_LegacyIAccessiblePatternId)
        Debug.Print element2.CurrentName & "|" & oPattern.CurrentValue
            If element2.CurrentName = "Save" Then
                Set MyElement = element2
                Exit Function
            End If
        Debug.Print element2.CurrentClassName
        Debug.Print element2.CurrentAutomationId
        GetElement element2
        Debug.Print element2.CurrentName
        If Not MyElement Is Nothing Then Exit Function
        Set element2 = walker.GetNextSiblingElement(element2)
    Loop
End Function
Function AddReference() As Boolean
    Dim VBAEditor As VBIDE.VBE
    Dim vbProj As VBIDE.VBProject
    Dim chkRef As VBIDE.Reference
    Set VBAEditor = Application.VBE
    Set vbProj = ThisWorkbook.VBProject
    For Each chkRef In vbProj.References
        If chkRef.Name Like "*IBM PCOMM 4.01*" Then
        GoTo Flush
        End If
    Next
    On Error GoTo Hell:
    vbProj.References.AddFromFile Environ("systemroot") & "\system32\uiautomationcore.dll"
   
Hell:
    If Err.Number = 48 Then
        AddReference = False
    ElseIf Err.Number = 0 Then
        AddReference = True
    End If
Flush:
    Set vbProj = Nothing
    Set VBAEditor = Nothing
End Function

Comments

Popular posts from this blog

Python - PyQt5 set Background image

import sys from PyQt5.QtCore import QSize from PyQt5.QtGui import QImage, QPalette, QBrush from PyQt5.QtWidgets import * class MainWindow ( QWidget ): def __init__ ( self ): QWidget. __init__ ( self ) self .setGeometry( 100 , 100 , 300 , 200 ) oImage = QImage( "test.jpg" ) sImage = oImage.scaled(QSize( 300 , 200 )) # resize Image to widgets size palette = QPalette() palette.setBrush( 10 , QBrush(sImage)) # 10 = Windowrole self .setPalette(palette) self .show() if __name__ == "__main__" : app = QApplication(sys.argv) oMainwindow = MainWindow() sys.exit(app.exec_())

pymsgbox - python package for message box

#This tutorial for to get a confirmation from the user by promting window #Python package "pymsgbox" needs to be install before run this below code #To install "pymsgbox" package go to command prompt and type in "PIP3 INSTALL pymsgbox" import pymsgbox #Displays a message box with OK and Cancel buttons. Number and text of buttons can be customized. Returns the text of the button clicked on. replyV = pymsgbox.confirm( text = 'Please login your application and click on on okay' , title = 'Login Confirmation' , buttons =[ 'OK' , 'Cancel' ]) print (replyV) #Displays a simple message box with text and a single OK button. Returns the text of the button clicked on. replyV = pymsgbox.alert( text = '' , title = '' , button = 'OK' ) print (replyV) #Displays a message box with text input, and OK & Cancel buttons. Returns the text entered, or None if Cancel was clicked. replyV1 = pyms