Я работаю над автоматизацией приложения Windows. Я использую белую структуру teststack. Я столкнулся с проблемой. В этой программе есть объект «Окно», который я не вижу внутри. Белый не показывает никаких элементов управления внутри него. Inspect.exe также не показывает никаких элементов управления внутри него при работе в режиме автоматизации пользовательского интерфейса. Если я переключу Inspect на MSAA, он прекрасно увидит элементы управления внутри. Могу ли я в любом случае использовать MSAA из C #, чтобы получить доступ к этим элементам управления?
MSAA находит элементы управления, которых нет в UI Automation
Ответы (1)
Если вы можете идентифицировать нужные вам функции MSAA, вы можете использовать P/Invoke для их вызова из C#. Вот пример статьи о том, как сделать это с помощью MSAA:
http://www.codeproject.com/Articles/38906/UI-Automation-Using-Microsoft-Active-Accessibility
Кроме того, pinvoke.net можно использовать для идентификации функций IAccessible (MSAA):
http://www.pinvoke.net/search.aspx?search=IAccessible&namespace=[All]
Вот еще один ответ SO в этих строках:
Наконец, в качестве альтернативы P/Invoke вы также можете использовать Tlbimp.exe для создания сборки-оболочки для oleacc.dll и доступа через нее к функциям MSAA. Я не уверен, что это работает с MSAA, но попробовать стоит.
В качестве примера, вот написанный мною пример hello world на C#, который показывает, как использовать COM-интерфейс автоматизации пользовательского интерфейса из C#, используя сборку, созданную с помощью Tlbimp.exe:
Как упоминалось в комментариях к этому файлу, для Windows 7.1 SDK создание сборки с помощью Tlbimp.exe выглядело следующим образом:
"%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\bin\tlbimp.exe" %windir%\system32\UIAutomationCore.dll /out:interop.UIAutomationCore.dll