MSAA находит элементы управления, которых нет в UI Automation

Я работаю над автоматизацией приложения Windows. Я использую белую структуру teststack. Я столкнулся с проблемой. В этой программе есть объект «Окно», который я не вижу внутри. Белый не показывает никаких элементов управления внутри него. Inspect.exe также не показывает никаких элементов управления внутри него при работе в режиме автоматизации пользовательского интерфейса. Если я переключу Inspect на MSAA, он прекрасно увидит элементы управления внутри. Могу ли я в любом случае использовать MSAA из C #, чтобы получить доступ к этим элементам управления?


person JonM    schedule 05.12.2014    source источник


Ответы (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 в этих строках:

    MSAA на базе COM?

  • Наконец, в качестве альтернативы P/Invoke вы также можете использовать Tlbimp.exe для создания сборки-оболочки для oleacc.dll и доступа через нее к функциям MSAA. Я не уверен, что это работает с MSAA, но попробовать стоит.

    В качестве примера, вот написанный мною пример hello world на C#, который показывает, как использовать COM-интерфейс автоматизации пользовательского интерфейса из C#, используя сборку, созданную с помощью Tlbimp.exe:

    https://github.com/billagee/test-polyglot/blob/master/printDesktopUiaElementName/ms-ui-automation-com-api/csharp/PrintDesktopUiaElementNameViaCom/PrintDesktopUiaElementNameViaComProgram.cs

    Как упоминалось в комментариях к этому файлу, для Windows 7.1 SDK создание сборки с помощью Tlbimp.exe выглядело следующим образом:

    "%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\bin\tlbimp.exe" %windir%\system32\UIAutomationCore.dll /out:interop.UIAutomationCore.dll

person Bill Agee    schedule 06.12.2014