Как использовать автоматизацию пользовательского интерфейса MS в Delphi 2009

У меня есть приложение C#, которое использует функциональность Microsoft UI Automation, например. г. вызов типа AutomationElement.RootElement.FindFirst(...).

Теперь мне нужно сделать то же самое (использовать автоматизацию пользовательского интерфейса MS) в Delphi 2009.

Как я могу

а) объявить, что мой код Delphi использует библиотеку автоматизации пользовательского интерфейса MS и б) сделать вызовы типа AutomationElement.RootElement.FindFirst(...)

?

Существует несколько руководств (руководство 1, tutorial 2), в котором объясняется, как упаковать собственный код .NET, чтобы его можно было использовать с Delphi, но в моем случае мне нужно использовать "предварительно упакованную" (уже установленную) сборку в Delphi.

Обновление 1

Теперь я могу получить доступ к AutomationElement.RootElemeent на одной машине, но не работает на другой.

Как узнать причину, по которой попытка выполнить uiAutomation := CoCUIAutomation.Create; на второй машине не удалась?


person Mentiflectax    schedule 15.10.2012    source источник
comment
Если он уже установлен и представлен как COM, его можно просто использовать как любой другой COM-объект: импортировать библиотеку типов и т. д.   -  person Ondrej Kelle    schedule 15.10.2012
comment
Можете ли вы указать мне учебник (в идеале с примерами кода) о том, как импортировать его в Delphi?   -  person Mentiflectax    schedule 15.10.2012
comment
Если маршрут с библиотекой типов не срабатывает, единственным известным мне надежным способом вызова сборок .net из Delphi является коммерческий продукт RemObjects Hydra, который очень хорошего качества.   -  person Warren P    schedule 15.10.2012
comment
Он представлен в COM в Windows 7 (UIAutomationCore.dll).   -  person Sertac Akyuz    schedule 16.10.2012
comment
Я импортировал DLL автоматизации пользовательского интерфейса MS в свой проект Delphi. Как я могу получить доступ к статическому свойству AutomationElement.RootElement?   -  person Mentiflectax    schedule 16.10.2012
comment
re update1: RTL должен вызвать исключение, которое подскажет, почему он терпит неудачу. Можете ли вы запустить «inspect.exe» из инструментов SDK или аналогичных на неисправной машине?   -  person Sertac Akyuz    schedule 16.10.2012
comment
В выводе отладки я вижу сообщение CoInitialize not called: GUID=.... Я поставил CoInitialize(nil) в раздел initialization (как рекомендуют некоторые форумы), но это не помогло.   -  person Mentiflectax    schedule 16.10.2012


Ответы (1)


Как указано в комментариях, вы должны импортировать библиотеку типов автоматизации пользовательского интерфейса (COM-объект) в свой проект, это можно сделать с помощью мастера «Импорт компонента» (Компонент -> Импорт компонента) в Delphi 2010.

Microsoft сохранила интерфейс COM-объекта очень близким к его аналогу .NET, поэтому у вас не должно возникнуть особых проблем с его использованием, если вы уже знакомы с библиотекой автоматизации .NET.

person Daniel Santos    schedule 30.04.2013