Немного не могу понять как с этим работать. Делаю так:
//hWnd - хендл элемента
IAccessible* iWnd;
VARIANT idChl;
VariantInit(&idChl);
VARIANT varResult;
AccessibleObjectFromWindow(hWnd, 0, IID_IAccessible, (LPVOID*)&iWnd);
iWnd->get_accRole(idChl,&varResult);
printf("Role = %d\n\r",varResult.lVal);
AccessibleObjectFromWindow и get_accRole выполняются нормально. При обходе всех элементов окна Outlook например, получаю одинаковое значение 9.
Видимо, что то не до понял из msdn...
Здравствуйте, mr.pavel, Вы писали:
MP>MSAA
MP>Oleacc.h
MP>MSDN for details
MP>MP>Accessible: IAccessible;
MP>..
MP>if Succeeded(AccessibleObjectFromWindow(AWnd, ..,..IAccessible, Accessible)) then
MP> Role := Accessible.get_accRole(....)
MP>
MP>and check the Role against:
MP>ROLE_SYSTEM_TEXT
MP>ROLE_SYSTEM_DROPLIST
MP>ROLE_SYSTEM_COMBOBOX
MP>ROLE_SYSTEM_COLUMN
MP>ROLE_SYSTEM_COLUMNHEADER
MP>..
MP>and so on
MP>Здравствуйте, st0nx, Вы писали:
S>>Возникла необходимость определить тип элемента управления(ListBox, ComboBox, Button...) чужого окна, имея его идентификатор(handle)
S>>Пробовал определять по классу или\и по стилю. Но например некие элементы из окна MS Office Outlook:
S>>S>>MsoCommandBar 56000000
S>>MsoCommandBar 46000000
S>>
S>>Это имя класса и его стиль. В общем, вопрос в том: каким еще образом можно определить, какой это элемент управления, если используется нестандартный класс при его создании?