2009-12-15 2 views
1

Мне интересно, если MSAA является COM-based, тогда вы должны иметь возможность использовать CreateObject («Доступность») для создания экземпляра и вызова его методов. Я не имел успеха в этом. У меня есть «OLEACC.DLL» в SYSTEM32, и он зарегистрирован в Windows. Но CreateObject выходит из строя.MSAA COM-based?

Любые мысли?

Я хотел бы использовать такие функции, как AccessibleObjectFromPoint(), чтобы получить объект IAccessible элемента управления в данной точке.

У кого-нибудь было такое ощущение?

Любой вход будет высоко оценен,

Спасибо,

Камиль

ответ

2

MSAA является COM основе. Тем не менее, не существует со-создаваемого класса, он раскрывает только интерфейсы. Вот почему вы не можете сделать CreateObject().

API-интерфейсы, открытые MSAA, такие как AccessibleObjectFromPoint и AccessibleObjectFromWindow, являются dll-экспортированными методами C++. Вы можете использовать их из C++, связав соответствующую lib или сделав LoadLibrary/GetProcAddress с именем функции. С C# вы можете получить декларацию P/nvoke для них от Pinvoke.net. Например, вот DllImport для AccessibleObjectFromWindow.

+0

Thanks Franci, Означает ли это, что MSAA нельзя получить через VBScript? Кстати, когда я добавляю ссылку на OLEACC.DLL, Object Browser показывает открытый класс «CAccPropServices». Разве это не означает, что этот класс является со-творцом? Я понимаю, что ранее упомянутая функция (AccessibleObject ...) не является методом этих calss, но я также хотел бы использовать «SetHwndPropStr», который является методом этого класса. Cheers, Kamil - – kamilimak

+0

Я не знаю, как получить доступ к MSAA через VBScript. Что касается класса CAccPropServices, даже если класс отображается в библиотеке типов, это не означает, что есть фабрика классов, которая может создать ее для вас. Кстати, насколько мне известно, этот класс не предназначен для непосредственного использования приложениями. –

+1

MSAA поддерживает IDispatch и может использоваться из VBScript или любого позднего связующего языка. –