mendrofa

how to identify each tab?

4 posts in this topic

#1 ·  Posted (edited)

#include <IE.au3>
const $navOpenInBackgroundTab = 4096
Global $url = "https://www.binary.com/d/trade.cgi?market=random&time=5t&form_name=risefall&expiry_type=duration&amount_type=payout&H=S0P&currency=USD&underlying_symbol=R_75&amount=100&date_start=now&type=CALL&L=S0P&l=ID"
$oIE = _IECreate($url)
$oIE.Navigate2($url)
$oIE.Navigate2($url, $navOpenInBackgroundTab)
$oIE.Navigate2($url, $navOpenInBackgroundTab)

 

Edited by mendrofa

Share this post


Link to post
Share on other sites



I don't know if such a function already exists somewhere, but here is mine :

#include <IE.au3>

const $navOpenInBackgroundTab = 4096
Global $url = "https://www.binary.com/d/trade.cgi?market=random&time=5t&form_name=risefall&expiry_type=duration&amount_type=payout&H=S0P&currency=USD&underlying_symbol=R_75&amount=100&date_start=now&type=CALL&L=S0P&l=ID"
$oIE = _IECreate($url)
$oIE.Navigate2($url)


$oIETab1 = _IECreateTab($oIE, $url)
$oIETab2 = _IECreateTab($oIE, $url)
$oIETab2.Navigate2("google.com")


Func _IECreateTab($oIE, $sURL, $iWait = 1)
    If Not IsObj($oIE) Then Return SetError(1, 0, 0)
    
    $oIE.Navigate2("about:blank", $navOpenInBackgroundTab)
    Do
        $oIETab = _IEAttach("about:blank", "url", 1)
        If Not @error Then ExitLoop
    Until IsObj($oIETab)
    
    _IENavigate($oIETab, $sURL)
    If $iWait Then _IELoadWait($oIETab)
    Return $oIETab
EndFunc

 

Share this post


Link to post
Share on other sites

I do not know if there are any easier solutions, but it can be done this way:

#include <IE.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPIConstants.au3>
#include <WinAPI.au3>
#include "MSAccessibility.au3"

Global $aAccObjects[100][3], $iAccObjects = 0

const $navOpenInBackgroundTab = 4096
Global $url = "https://www.binary.com/d/trade.cgi?market=random&time=5t&form_name=risefall&expiry_type=duration&amount_type=payout&H=S0P&currency=USD&underlying_symbol=R_75&amount=100&date_start=now&type=CALL&L=S0P&l=ID"
$oIE = _IECreate($url)
$oIE.Navigate2($url)
$oIE.Navigate2($url, $navOpenInBackgroundTab)
$oIE.Navigate2($url, $navOpenInBackgroundTab)
Sleep(5000)

Local $hChild = 0, $hWindow = WinGetHandle( "[CLASS:IEFrame]", "" ) ; Internet Explorer
FindChildWindowByClass( $hWindow, $hChild, "DirectUIHWND" ) ; This function does not depend on a specific IE version
;ConsoleWrite( "$hChild = " & $hChild & @CRLF & @CRLF )

; Accessible object
Local $pChild, $oChild
AccessibleObjectFromWindow( $hChild, $OBJID_CLIENT, $tIID_IAccessible, $pChild )
WalkTreeWithAccessibleChildren( $pChild, 0, 2 ) ; The tabs belongs to level 1 (zero based)
;ConsoleWrite( @CRLF )                          ; Identifying the tabs by the level makes it independent of the localized string "Tab Row"

For $i = 0 To $iAccObjects - 1
  If $aAccObjects[$i][2] = 1 Then ExitLoop      ; The tabs belongs to level 1
Next
Local $iAccFirst = $i, $iAccCount = $iAccObjects - $i - 1 ; Index of first tab, number of tabs

Local $hGui = GUICreate( "IE Tabs", 400, 160, -1, 300, -1, $WS_EX_TOPMOST )

Local $idBut1 = GUICtrlCreateButton( $aAccObjects[$iAccFirst][1] & " " & 0, 10, 10, 380, 40 )
For $i = 1 To $iAccCount - 1
  GUICtrlCreateButton( $aAccObjects[$iAccFirst+$i][1] & " " & $i, 10, 10+$i*50, 380, 40 )
Next

GUISetState()

Local $iMsg
While 1
  $iMsg = GUIGetMsg()
  Switch $iMsg
    Case $idBut1 To $idBut1 + $iAccCount - 1
      $aAccObjects[$iAccFirst+$iMsg-$idBut1][0].accDoDefaultAction(0)
    Case $GUI_EVENT_CLOSE
      ExitLoop
  EndSwitch
WEnd

; Cleanup
For $i = 0 To $iAccObjects - 1
  $aAccObjects[$i][0] = 0
Next
GUIDelete( $hGui )
Exit


Func FindChildWindowByClass( $hParent, ByRef $hFound, $sClass )
  If Not $hParent Then Return
  Local $hChild = _WinAPI_GetWindow( $hParent, $GW_CHILD )
  While $hChild
    If _WinAPI_GetClassName( $hChild ) = $sClass Then
      $hFound = $hChild
      Return
    EndIf
    FindChildWindowByClass( $hChild, $hFound, $sClass )
    $hChild = _WinAPI_GetWindow( $hChild, $GW_HWNDNEXT )
  WEnd
EndFunc

Func WalkTreeWithAccessibleChildren( $pAcc, $iLevel, $iLevels = 0 )
  If $iLevels And $iLevel = $iLevels Then Return

  ; Create object
  Local $oAcc = ObjCreateInterface( $pAcc, $sIID_IAccessible, $dtagIAccessible )
  If Not IsObj( $oAcc ) Then Return
  $oAcc.AddRef()

  Local $iChildCount, $iReturnCount, $tVarChildren

  ; Get children
  If $oAcc.get_accChildCount( $iChildCount ) Or Not $iChildCount Then Return
  If AccessibleChildren( $pAcc, 0, $iChildCount, $tVarChildren, $iReturnCount ) Then Return

  ; Indentation
  Local $sIndent = ""
  For $i = 0 To $iLevel - 1
    $sIndent &= "    "
  Next

  Local $vt, $oChildObj, $iChildElem, $sName

  ; For each child
  For $i = 1 To $iReturnCount

    ; $tVarChildren is an array of VARIANTs with information about the children
    $vt = BitAND( DllStructGetData( $tVarChildren, $i, 1 ), 0xFFFF )

    If $vt = $VT_DISPATCH Then

      ; Child object
      $pChildObj = DllStructGetData( $tVarChildren, $i, 3 )
      $aAccObjects[$iAccObjects][0] = ObjCreateInterface( $pChildObj, $sIID_IAccessible, $dtagIAccessible )
      If IsObj( $aAccObjects[$iAccObjects][0] ) Then
        ;PrintObjectInfo( $aAccObjects[$iAccObjects], $CHILDID_SELF, $sIndent )
        $aAccObjects[$iAccObjects][0].get_accName( $CHILDID_SELF, $sName )
        $aAccObjects[$iAccObjects][1] = $sName
        $aAccObjects[$iAccObjects][2] = $iLevel
        $iAccObjects += 1

        WalkTreeWithAccessibleChildren( $pChildObj, $iLevel + 1, $iLevels )
      EndIf

    Else ; $vt = $VT_I4

      ; Child element
      $iChildElem = DllStructGetData( $tVarChildren, $i, 3 )
      ;PrintObjectInfo( $oAcc, $iChildElem, $sIndent )

    EndIf

  Next
EndFunc

Func PrintObjectInfo( $oAcc, $iChild, $sIndent )
  Local $sName, $iRole, $sRole, $iRoleLen
  Local $iState, $sState, $iStateLen, $x, $y, $w, $h
  If $iChild <> $CHILDID_SELF Then _
    ConsoleWrite( $sIndent & "$iChildElem = " & $iChild & @CRLF )
  $oAcc.get_accName( $iChild, $sName )
  ConsoleWrite( $sIndent & "Name = " & $sName & @CRLF )
EndFunc

 

Save as MSAccessibility.au3:

#include-once

;#include "CUIAutomation2.au3"

;Global Const $S_OK                  = 0x00000000
Global Const $S_FALSE               = 0x00000001
;Global Const $E_NOTIMPL             = 0x80004001
;Global Const $E_NOINTERFACE         = 0x80004002
;Global Const $E_FAIL                = 0x80004005
Global Const $DISP_E_MEMBERNOTFOUND = 0x80020003
;Global Const $E_OUTOFMEMORY         = 0x8007000E
;Global Const $E_INVALIDARG          = 0x80070057

Global Const $VT_EMPTY    = 0
Global Const $VT_I4       = 3
Global Const $VT_DISPATCH = 9

;Global Const $tagVARIANT = "word vt;word r1;word r2;word r3;ptr data; ptr;"
If @AutoItX64 Then
  Global $tagVARIANT = "dword[6];" ; Use this form to be able to build an
Else                               ; array in function AccessibleChildren.
  Global $tagVARIANT = "dword[4];"
EndIf

;Global Const $tIID_IAccessible = CLSIDFromString( $sIID_IAccessible )

;Global Const $sIID_IServiceProvider = "{6D5140C1-7436-11CE-8034-00AA006009FA}"
;Global Const $tIID_IServiceProvider = CLSIDFromString( $sIID_IServiceProvider )
;Global Const $dtagIServiceProvider = "QueryService hresult(struct*;struct*;ptr*);"


; ========= MS Active Accessibility constants =========

; Child ID for the object itself
; (in contrast to simple child elements of the object)
Global Const $CHILDID_SELF = 0

; Navigation constants
Global Const $NAVDIR_MIN        = 0
Global Const $NAVDIR_UP         = 0x1
Global Const $NAVDIR_DOWN       = 0x2
Global Const $NAVDIR_LEFT       = 0x3
Global Const $NAVDIR_RIGHT      = 0x4
Global Const $NAVDIR_NEXT       = 0x5
Global Const $NAVDIR_PREVIOUS   = 0x6
Global Const $NAVDIR_FIRSTCHILD = 0x7
Global Const $NAVDIR_LASTCHILD  = 0x8
Global Const $NAVDIR_MAX        = 0x9

; Selection flags
Global Const $SELFLAG_NONE            = 0
Global Const $SELFLAG_TAKEFOCUS       = 0x1
Global Const $SELFLAG_TAKESELECTION   = 0x2
Global Const $SELFLAG_EXTENDSELECTION = 0x4
Global Const $SELFLAG_ADDSELECTION    = 0x8
Global Const $SELFLAG_REMOVESELECTION = 0x10
Global Const $SELFLAG_VALID           = 0x1f

; Object identifiers
;Global Const $OBJID_WINDOW            = 0x00000000
Global Const $OBJID_SYSMENU           = 0xFFFFFFFF
;Global Const $OBJID_TITLEBAR          = 0xFFFFFFFE
Global Const $OBJID_MENU              = 0xFFFFFFFD
Global Const $OBJID_CLIENT            = 0xFFFFFFFC
Global Const $OBJID_VSCROLL           = 0xFFFFFFFB
Global Const $OBJID_HSCROLL           = 0xFFFFFFFA
;Global Const $OBJID_SIZEGRIP          = 0xFFFFFFF9
;Global Const $OBJID_CARET             = 0xFFFFFFF8
;Global Const $OBJID_CURSOR            = 0xFFFFFFF7
;Global Const $OBJID_ALERT             = 0xFFFFFFF6
;Global Const $OBJID_SOUND             = 0xFFFFFFF5
Global Const $OBJID_QUERYCLASSNAMEIDX = 0xFFFFFFF4
Global Const $OBJID_NATIVEOM          = 0xFFFFFFF0

; Object roles
Global Const $ROLE_SYSTEM_TITLEBAR           = 0x1
Global Const $ROLE_SYSTEM_MENUBAR            = 0x2
Global Const $ROLE_SYSTEM_SCROLLBAR          = 0x3
Global Const $ROLE_SYSTEM_GRIP               = 0x4
Global Const $ROLE_SYSTEM_SOUND              = 0x5
Global Const $ROLE_SYSTEM_CURSOR             = 0x6
Global Const $ROLE_SYSTEM_CARET              = 0x7
Global Const $ROLE_SYSTEM_ALERT              = 0x8
Global Const $ROLE_SYSTEM_WINDOW             = 0x9
Global Const $ROLE_SYSTEM_CLIENT             = 0xa
Global Const $ROLE_SYSTEM_MENUPOPUP          = 0xb
Global Const $ROLE_SYSTEM_MENUITEM           = 0xc
Global Const $ROLE_SYSTEM_TOOLTIP            = 0xd
Global Const $ROLE_SYSTEM_APPLICATION        = 0xe
Global Const $ROLE_SYSTEM_DOCUMENT           = 0xf
Global Const $ROLE_SYSTEM_PANE               = 0x10
Global Const $ROLE_SYSTEM_CHART              = 0x11
Global Const $ROLE_SYSTEM_DIALOG             = 0x12
Global Const $ROLE_SYSTEM_BORDER             = 0x13
Global Const $ROLE_SYSTEM_GROUPING           = 0x14
Global Const $ROLE_SYSTEM_SEPARATOR          = 0x15
Global Const $ROLE_SYSTEM_TOOLBAR            = 0x16
Global Const $ROLE_SYSTEM_STATUSBAR          = 0x17
Global Const $ROLE_SYSTEM_TABLE              = 0x18
Global Const $ROLE_SYSTEM_COLUMNHEADER       = 0x19
Global Const $ROLE_SYSTEM_ROWHEADER          = 0x1a
Global Const $ROLE_SYSTEM_COLUMN             = 0x1b
Global Const $ROLE_SYSTEM_ROW                = 0x1c
Global Const $ROLE_SYSTEM_CELL               = 0x1d
Global Const $ROLE_SYSTEM_LINK               = 0x1e
Global Const $ROLE_SYSTEM_HELPBALLOON        = 0x1f
Global Const $ROLE_SYSTEM_CHARACTER          = 0x20
Global Const $ROLE_SYSTEM_LIST               = 0x21
Global Const $ROLE_SYSTEM_LISTITEM           = 0x22
Global Const $ROLE_SYSTEM_OUTLINE            = 0x23
Global Const $ROLE_SYSTEM_OUTLINEITEM        = 0x24
Global Const $ROLE_SYSTEM_PAGETAB            = 0x25
Global Const $ROLE_SYSTEM_PROPERTYPAGE       = 0x26
Global Const $ROLE_SYSTEM_INDICATOR          = 0x27
Global Const $ROLE_SYSTEM_GRAPHIC            = 0x28
Global Const $ROLE_SYSTEM_STATICTEXT         = 0x29
Global Const $ROLE_SYSTEM_TEXT               = 0x2a
Global Const $ROLE_SYSTEM_PUSHBUTTON         = 0x2b
Global Const $ROLE_SYSTEM_CHECKBUTTON        = 0x2c
Global Const $ROLE_SYSTEM_RADIOBUTTON        = 0x2d
Global Const $ROLE_SYSTEM_COMBOBOX           = 0x2e
Global Const $ROLE_SYSTEM_DROPLIST           = 0x2f
Global Const $ROLE_SYSTEM_PROGRESSBAR        = 0x30
Global Const $ROLE_SYSTEM_DIAL               = 0x31
Global Const $ROLE_SYSTEM_HOTKEYFIELD        = 0x32
Global Const $ROLE_SYSTEM_SLIDER             = 0x33
Global Const $ROLE_SYSTEM_SPINBUTTON         = 0x34
Global Const $ROLE_SYSTEM_DIAGRAM            = 0x35
Global Const $ROLE_SYSTEM_ANIMATION          = 0x36
Global Const $ROLE_SYSTEM_EQUATION           = 0x37
Global Const $ROLE_SYSTEM_BUTTONDROPDOWN     = 0x38
Global Const $ROLE_SYSTEM_BUTTONMENU         = 0x39
Global Const $ROLE_SYSTEM_BUTTONDROPDOWNGRID = 0x3a
Global Const $ROLE_SYSTEM_WHITESPACE         = 0x3b
Global Const $ROLE_SYSTEM_PAGETABLIST        = 0x3c
Global Const $ROLE_SYSTEM_CLOCK              = 0x3d
Global Const $ROLE_SYSTEM_SPLITBUTTON        = 0x3e
Global Const $ROLE_SYSTEM_IPADDRESS          = 0x3f
Global Const $ROLE_SYSTEM_OUTLINEBUTTON      = 0x40

; Object state constants
Global Const $STATE_SYSTEM_NORMAL          = 0
Global Const $STATE_SYSTEM_UNAVAILABLE     = 0x1
Global Const $STATE_SYSTEM_SELECTED        = 0x2
Global Const $STATE_SYSTEM_FOCUSED         = 0x4
;Global Const $STATE_SYSTEM_PRESSED         = 0x8
Global Const $STATE_SYSTEM_CHECKED         = 0x10
Global Const $STATE_SYSTEM_MIXED           = 0x20
Global Const $STATE_SYSTEM_INDETERMINATE   = $STATE_SYSTEM_MIXED
Global Const $STATE_SYSTEM_READONLY        = 0x40
Global Const $STATE_SYSTEM_HOTTRACKED      = 0x80
Global Const $STATE_SYSTEM_DEFAULT         = 0x100
Global Const $STATE_SYSTEM_EXPANDED        = 0x200
Global Const $STATE_SYSTEM_COLLAPSED       = 0x400
Global Const $STATE_SYSTEM_BUSY            = 0x800
Global Const $STATE_SYSTEM_FLOATING        = 0x1000
Global Const $STATE_SYSTEM_MARQUEED        = 0x2000
Global Const $STATE_SYSTEM_ANIMATED        = 0x4000
;Global Const $STATE_SYSTEM_INVISIBLE       = 0x8000
Global Const $STATE_SYSTEM_OFFSCREEN       = 0x10000
Global Const $STATE_SYSTEM_SIZEABLE        = 0x20000
Global Const $STATE_SYSTEM_MOVEABLE        = 0x40000
Global Const $STATE_SYSTEM_SELFVOICING     = 0x80000
Global Const $STATE_SYSTEM_FOCUSABLE       = 0x100000
Global Const $STATE_SYSTEM_SELECTABLE      = 0x200000
Global Const $STATE_SYSTEM_LINKED          = 0x400000
Global Const $STATE_SYSTEM_TRAVERSED       = 0x800000
Global Const $STATE_SYSTEM_MULTISELECTABLE = 0x1000000
Global Const $STATE_SYSTEM_EXTSELECTABLE   = 0x2000000
Global Const $STATE_SYSTEM_ALERT_LOW       = 0x4000000
Global Const $STATE_SYSTEM_ALERT_MEDIUM    = 0x8000000
Global Const $STATE_SYSTEM_ALERT_HIGH      = 0x10000000
Global Const $STATE_SYSTEM_PROTECTED       = 0x20000000
Global Const $STATE_SYSTEM_HASPOPUP        = 0x40000000
Global Const $STATE_SYSTEM_VALID           = 0x7fffffff

; Event constants
;#include "APIConstants.au3"   ; AutoIt 3.3.8.0+
#include <APISysConstants.au3> ; AutoIt 3.3.10.0+

#cs
Global Const $EVENT_MIN = 0x00000001
Global Const $EVENT_SYSTEM_SOUND = 0x00000001
Global Const $EVENT_SYSTEM_ALERT = 0x00000002
Global Const $EVENT_SYSTEM_FOREGROUND = 0x00000003
Global Const $EVENT_SYSTEM_MENUSTART = 0x00000004
Global Const $EVENT_SYSTEM_MENUEND = 0x00000005
Global Const $EVENT_SYSTEM_MENUPOPUPSTART = 0x00000006
Global Const $EVENT_SYSTEM_MENUPOPUPEND = 0x00000007
Global Const $EVENT_SYSTEM_CAPTURESTART = 0x00000008
Global Const $EVENT_SYSTEM_CAPTUREEND = 0x00000009
Global Const $EVENT_SYSTEM_MOVESIZESTART = 0x0000000A
Global Const $EVENT_SYSTEM_MOVESIZEEND = 0x0000000B
Global Const $EVENT_SYSTEM_CONTEXTHELPSTART = 0x0000000C
Global Const $EVENT_SYSTEM_CONTEXTHELPEND = 0x0000000D
Global Const $EVENT_SYSTEM_DRAGDROPSTART = 0x0000000E
Global Const $EVENT_SYSTEM_DRAGDROPEND = 0x0000000F
Global Const $EVENT_SYSTEM_DIALOGSTART = 0x00000010
Global Const $EVENT_SYSTEM_DIALOGEND = 0x00000011
Global Const $EVENT_SYSTEM_SCROLLINGSTART = 0x00000012
Global Const $EVENT_SYSTEM_SCROLLINGEND = 0x00000013
Global Const $EVENT_SYSTEM_SWITCHSTART = 0x00000014
Global Const $EVENT_SYSTEM_SWITCHEND = 0x00000015
Global Const $EVENT_SYSTEM_MINIMIZESTART = 0x00000016
Global Const $EVENT_SYSTEM_MINIMIZEEND = 0x00000017
Global Const $EVENT_SYSTEM_DESKTOPSWITCH = 0x00000020
Global Const $EVENT_OBJECT_CREATE = 0x00008000
Global Const $EVENT_OBJECT_DESTROY = 0x00008001
Global Const $EVENT_OBJECT_SHOW = 0x00008002
Global Const $EVENT_OBJECT_HIDE = 0x00008003
Global Const $EVENT_OBJECT_REORDER = 0x00008004
Global Const $EVENT_OBJECT_FOCUS = 0x00008005
Global Const $EVENT_OBJECT_SELECTION = 0x00008006
Global Const $EVENT_OBJECT_SELECTIONADD = 0x00008007
Global Const $EVENT_OBJECT_SELECTIONREMOVE = 0x00008008
Global Const $EVENT_OBJECT_SELECTIONWITHIN = 0x00008009
Global Const $EVENT_OBJECT_STATECHANGE = 0x0000800A
Global Const $EVENT_OBJECT_LOCATIONCHANGE = 0x0000800B
Global Const $EVENT_OBJECT_NAMECHANGE = 0x0000800C
Global Const $EVENT_OBJECT_DESCRIPTIONCHANGE = 0x0000800D
Global Const $EVENT_OBJECT_VALUECHANGE = 0x0000800E
Global Const $EVENT_OBJECT_PARENTCHANGE = 0x0000800F
Global Const $EVENT_OBJECT_HELPCHANGE = 0x00008010
Global Const $EVENT_OBJECT_DEFACTIONCHANGE = 0x00008011
Global Const $EVENT_OBJECT_ACCELERATORCHANGE = 0x00008012
Global Const $EVENT_OBJECT_INVOKED = 0x00008013
Global Const $EVENT_OBJECT_TEXTSELECTIONCHANGED = 0x00008014
Global Const $EVENT_OBJECT_CONTENTSCROLLED = 0x00008015
Global Const $EVENT_MAX = 0x7FFFFFFF

Global Const $WINEVENT_INCONTEXT = 0x04
Global Const $WINEVENT_OUTOFCONTEXT = 0x00
Global Const $WINEVENT_SKIPOWNPROCESS = 0x02
Global Const $WINEVENT_SKIPOWNTHREAD = 0x01
#ce


; ========= MS Active Accessibility interface =========

; Copied from CUIAutomation2.au3 by junkew

Global Const $sIID_IAccessible="{618736E0-3C3D-11CF-810C-00AA00389B71}"
Global $dtagIAccessible = "GetTypeInfoCount hresult(uint*);" & _ ; IDispatch
"GetTypeInfo hresult(uint;int;ptr*);" & _
"GetIDsOfNames hresult(struct*;wstr;uint;int;int);" & _
"Invoke hresult(int;struct*;int;word;ptr*;ptr*;ptr*;uint*);" & _
"get_accParent hresult(ptr*);" & _                               ; IAccessible
"get_accChildCount hresult(long*);" & _
"get_accChild hresult(variant;idispatch*);" & _
"get_accName hresult(variant;bstr*);" & _
"get_accValue hresult(variant;bstr*);" & _
"get_accDescription hresult(variant;bstr*);" & _
"get_accRole hresult(variant;variant*);" & _
"get_accState hresult(variant;variant*);" & _
"get_accHelp hresult(variant;bstr*);" & _
"get_accHelpTopic hresult(bstr*;variant;long*);" & _
"get_accKeyboardShortcut hresult(variant;bstr*);" & _
"get_accFocus hresult(struct*);" & _
"get_accSelection hresult(variant*);" & _
"get_accDefaultAction hresult(variant;bstr*);" & _
"accSelect hresult(long;variant);" & _
"accLocation hresult(long*;long*;long*;long*;variant);" & _
"accNavigate hresult(long;variant;variant*);" & _
"accHitTest hresult(long;long;variant*);" & _
"accDoDefaultAction hresult(variant);" & _
"put_accName hresult(variant;bstr);" & _
"put_accValue hresult(variant;bstr);"

Global Const $tIID_IAccessible = CLSIDFromString( $sIID_IAccessible )

; =====================================================


Global Const $hdllOleacc = DllOpen( "oleacc.dll" )

OnAutoItExitRegister( "ExitMSAccessibility" )

Func ExitMSAccessibility()
  DllClose( $hdllOleacc )
EndFunc


Func AccessibleChildren( $paccContainer, $iChildStart, $iChildren, ByRef $tVarChildren, ByRef $iObtained )
  Local $sVarArray = ""
  For $i = 1 To $iChildren
    $sVarArray &= $tagVARIANT
  Next
  $tVarChildren = DllStructCreate( $sVarArray )
  Local $aRet = DllCall( "oleacc.dll", "int", "AccessibleChildren", "ptr", $paccContainer, "int", $iChildStart, "int", $iChildren, "struct*", $tVarChildren, "int*", 0 )
  If @error Then Return SetError(1, 0, $S_FALSE)
  If $aRet[0] Then Return SetError(2, 0, $aRet[0])
  $iObtained = $aRet[5]
  Return $S_OK
EndFunc

Func AccessibleObjectFromEvent( $hWnd, $iObjectID, $iChildID, ByRef $pAccessible, ByRef $tVarChild )
  Local $tVARIANT = DllStructCreate( $tagVARIANT )
  Local $aRet = DllCall( $hdllOleacc, "int", "AccessibleObjectFromEvent", "hwnd", $hWnd, "dword", $iObjectID, "dword", $iChildID, "ptr*", 0, "struct*", $tVARIANT )
  If @error Then Return SetError(1, 0, $S_FALSE)
  If $aRet[0] Then Return SetError(2, 0, $aRet[0])
  $pAccessible = $aRet[4]
  $tVarChild = $aRet[5]
  Return $S_OK
EndFunc

Func AccessibleObjectFromPoint( $x, $y, ByRef $pAccessible, ByRef $tVarChild )
  Local $tPOINT = DllStructCreate( "long;long" )
  DllStructSetData( $tPOINT, 1, $x )
  DllStructSetData( $tPOINT, 2, $y )
  Local $tPOINT64 = DllStructCreate( "int64", DllStructGetPtr( $tPOINT ) )
  Local $tVARIANT = DllStructCreate( $tagVARIANT )
  Local $aRet = DllCall( $hdllOleacc, "int", "AccessibleObjectFromPoint", "int64", DllStructGetData( $tPOINT64, 1 ), "ptr*", 0, "struct*", $tVARIANT )
  If @error Then Return SetError(1, 0, $S_FALSE)
  If $aRet[0] Then Return SetError(2, 0, $aRet[0])
  $pAccessible = $aRet[2]
  $tVarChild = $aRet[3]
  Return $S_OK
EndFunc

Func AccessibleObjectFromWindow( $hWnd, $iObjectID, $tRIID, ByRef $pObject )
  Local $aRet = DllCall( $hdllOleacc, "int", "AccessibleObjectFromWindow", "hwnd", $hWnd, "dword", $iObjectID, "struct*", $tRIID, "int*", 0 )
  If @error Then Return SetError(1, 0, $S_FALSE)
  If $aRet[0] Then Return SetError(2, 0, $aRet[0])
  $pObject = $aRet[4]
  Return $S_OK
EndFunc

Func WindowFromAccessibleObject( $pAccessible, ByRef $hWnd )
  Local $aRet = DllCall( $hdllOleacc, "int", "WindowFromAccessibleObject", "ptr", $pAccessible, "hwnd*", 0 )
  If @error Then Return SetError(1, 0, $S_FALSE)
  If $aRet[0] Then Return SetError(2, 0, $aRet[0])
  $hWnd = $aRet[2]
  Return $S_OK
EndFunc

Func GetRoleText( $iRole, $sRole, $iRoleMax )
  Local $aRet = DllCall( $hdllOleacc, "uint", "GetRoleTextW", "dword", $iRole, "ptr", $sRole, "uint", $iRoleMax )
  If @error Then Return SetError(1, 0, 0)
  If Not $aRet[0] Then Return SetError(2, 0, 0)
  Return $aRet[0]
EndFunc

Func GetStateText( $iStateBit, $sStateBit, $iStateBitMax )
  Local $aRet = DllCall( $hdllOleacc, "uint", "GetStateTextW", "dword", $iStateBit, "ptr", $sStateBit, "uint", $iStateBitMax )
  If @error Then Return SetError(1, 0, 0)
  If Not $aRet[0] Then Return SetError(2, 0, 0)
  Return $aRet[0]
EndFunc

; Copied form WinAPISys.au3
; Authors: KaFu, Yashied, Jpm
Func SetWinEventHook($iEventMin, $iEventMax, $pEventProc, $iProcessID = 0, $iThreadID = 0, $iFlags = 0)
  Local $Ret = DllCall('user32.dll', 'handle', 'SetWinEventHook', 'uint', $iEventMin, 'uint', $iEventMax, 'ptr', 0, _
    'ptr', $pEventProc, 'dword', $iProcessID, 'dword', $iThreadID, 'uint', $iFlags)
  If @error Then Return SetError(@error, @extended, 0)
  Return $Ret[0]
EndFunc

; Copied form WinAPISys.au3
; Authors: KaFu, Yashied, Jpm
Func UnhookWinEvent($hEventHook)
  Local $Ret = DllCall('user32.dll', 'bool', 'UnhookWinEvent', 'handle', $hEventHook)
  If @error Then Return SetError(@error, @extended, False)
  Return $Ret[0]
EndFunc

; Copied form WinAPICom.au3
; Authors: Yashied, Jpm
Func CoTaskMemFree($pMemory)
  DllCall('ole32.dll', 'none', 'CoTaskMemFree', 'ptr', $pMemory)
  If @error Then Return SetError(@error, @extended, 0)
  Return 1
EndFunc

; Copied and slightly modified from AutoItObject.au3 by the AutoItObject-Team
Func CLSIDFromString( $sIID )
  Local $tCLSID = DllStructCreate( "dword;word;word;byte[8]" )
  Local $aRet = DllCall( "ole32.dll", "long", "CLSIDFromString", "wstr", $sIID, "struct*", $tCLSID )
  If @error Then Return SetError(1, @error, 0)
  If $aRet[0] <> 0 Then Return SetError(2, $aRet[0], 0)
  Return $tCLSID
EndFunc


Func PrintElementInfo( $oElement, $iChild, $sIndent )
  Local $sName, $iRole, $sRole, $iRoleLen
  Local $iState, $sState, $iStateLen
  Local $sValue, $x, $y, $w, $h
  If $iChild <> $CHILDID_SELF Then _
    ConsoleWrite( $sIndent & "$iChildElem = " & $iChild & @CRLF )
  $oElement.get_accName( $iChild, $sName )
  ConsoleWrite( $sIndent & "$sName  = " & $sName & @CRLF )
  If $oElement.get_accRole( $iChild, $iRole ) = $S_OK Then
    ConsoleWrite( $sIndent & "$iRole  = 0x" & Hex( $iRole ) & @CRLF )
    $iRoleLen = GetRoleText( $iRole, 0, 0 ) + 1
    $sRole = DllStructCreate( "wchar[" & $iRoleLen & "]" )
    GetRoleText( $iRole, DllStructGetPtr( $sRole ), $iRoleLen )
    ConsoleWrite( $sIndent & "$sRole  = " & DllStructGetData( $sRole, 1 ) & @CRLF )
  EndIf
  If $oElement.get_accState( $iChild, $iState ) = $S_OK Then
    ConsoleWrite( $sIndent & "$iState = 0x" & Hex( $iState ) & @CRLF )
    $iStateLen = GetStateText( $iState, 0, 0 ) + 1
    $sState = DllStructCreate( "wchar[" & $iStateLen & "]" )
    GetStateText( $iState, DllStructGetPtr( $sState ), $iStateLen )
    ConsoleWrite( $sIndent & "$sState = " & DllStructGetData( $sState, 1 ) & @CRLF )
  EndIf
  If $oElement.get_accValue( $iChild, $sValue ) = $S_OK Then _
    ConsoleWrite( $sIndent & "$sValue = " & $sValue & @CRLF )
  IF $oElement.accLocation( $x, $y, $w, $h, $iChild ) = $S_OK Then _
    ConsoleWrite( $sIndent & "$x, $y, $w, $h = " & $x & ", " & $y & ", " & $w & ", " & $h & @CRLF )
  ConsoleWrite( @CRLF )
EndFunc

 

1 person likes this

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now