Windows アプリケーションの自動化に取り組んでいます。テストスタックの白いフレームワークを使用しています。問題が発生しました。このプログラムには、内部が見えない「ウィンドウ」オブジェクトがあります。白はその中にコントロールを示していません。Inspect.exe は、UI オートメーション モードで実行している場合でも、内部にコントロールを表示しません。Inspect を MSAA に切り替えると、内部のコントロールが正常に表示されます。これらのコントロールを処理するために C# から MSAA を使用する方法はありますか?
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=[すべて]
これらの行に沿った別のSOの回答は次のとおりです。
最後に、P/Invoke の代わりに、Tlbimp.exe を使用して oleacc.dll のラッパー アセンブリを作成し、それを介して MSAA 関数にアクセスすることもできます。それが MSAA で機能するかどうかはわかりませんが、試してみる価値はあります。
例として、Tlbimp.exe で作成されたアセンブリを使用して、C# から UI オートメーション COM インターフェイスを使用する方法を示す、私が書いた C# の hello world の例を次に示します。
そのファイルのコメントに記載されているように、Windows 7.1 SDK の時点で、Tlbimp.exe を使用してアセンブリを生成すると、次のようになります。
"%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\bin\tlbimp.exe" %windir%\system32\UIAutomationCore.dll /out:interop.UIAutomationCore.dll