У элемента UIAutomation есть метод GetIAccessible. Судя по описанию, данный метод возвращает указатель на интерфейс IAccessible. Функция VarGetType сообщает, что это объект, но IsObj этого не подтверждает. Пробовал получить свойство accChildCount через метод get_accChildCount, но получил ошибку. Причём ошибка не в том, что это не объект, а, видимо, в том, что не находит такого метода.
Ещё пробовал создать объект из описания интерфейса, но тоже безрезультатно.
Как получить доступ к методам IAccessible?
Код:
#include <UIAutomate.au3> ; http://autoit-script.ru/index.php?topic=16780.0
$hCtrl = ControlGetHandle("Program Manager", "", "SysListView321") ; рабочий стол Win7
$oElement = _UIA_GetElementFromHandle($hCtrl)
Global $pIAccess, $oIAccess, $oAcc, $iCount
$oElement.GetCurrentPattern($UIA_LegacyIAccessiblePatternId, $pIAccess)
$oIAccess = ObjCreateInterface($pIAccess, $sIID_IUIAutomationLegacyIAccessiblePattern, $dtagIUIAutomationLegacyIAccessiblePattern)
$oIAccess.GetIAccessible($oAcc)
ConsoleWrite(VarGetType($oAcc) & ":" & IsObj($oAcc) & @CRLF)
$oAcc.get_accChildCount($iCount)
ConsoleWrite($iCount & @CRLF)
Ещё пробовал создать объект из описания интерфейса, но тоже безрезультатно.
Код:
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);"
...
$oIAccess.GetIAccessible($pAcc)
$oAcc = ObjCreateInterface($pAcc, $sIID_IAccessible, $dtagIAccessible)
ConsoleWrite(VarGetType($oAcc) & ":" & IsObj($oAcc) & @CRLF)
$oAcc.get_accChildCount($iCount)
ConsoleWrite($iCount & @CRLF)
Как получить доступ к методам IAccessible?