みなさん、こんにちは。
私は、Windows 7 Explorerの新しいItemsViewコントロールでホットアイテムのインデックスを取得できる必要があるC#プログラムに取り組んでいます。幸い、Microsoftは、コントロールのカスタムプロパティをクエリすることにより、UIオートメーションを介してこれを行う方法を提供しています。
残念ながら、System.Windows.Automation名前空間は、不可解にもカスタムプロパティをクエリする方法を提供していないようです。これにより、C#Automation名前空間を完全に破棄し、管理されていないCOMバージョンのみを使用しなければならないという望ましくない立場が残ります。これを行う1つの方法は、すべての自動化コードを別のC ++ / CLIモジュールに入れて、C#アプリケーションから呼び出すことです。ただし、プロジェクトにファイルが追加されるため、可能であればこのオプションは避けたいと思います。また、32/64ビットの問題などについて心配する必要があります。
もう1つのオプションは、ComImport属性を使用して関連するインターフェースを宣言し、COM相互運用機能を介してすべてを実行することです。これが私がやりたいことです。ただし、IUIAutomationやIUIAutomationElementなどの関連するインターフェイスは、非常に大きなものです。それらには合計で数百のメソッドがあり、参照トンとトンのインターフェース(私も宣言する必要があると思います)があり、そのほとんどすべてを使用することはありません。UIオートメーションインターフェイスもタイプライブラリで宣言されていないと思うので、TLBIMPを使用できません。
バジリオンのメソッドシグネチャを手動でC#に変換する必要がなく、代わりに実際に必要な10個程度のメソッドのみを宣言する方法はありますか?C#4.0では、COMの相互運用を容易にするはずの新しい「動的」タイプが追加されたことがわかります。それは私の問題にまったく関係がありますか?
ありがとう