大家好,
我正在开发一个 C# 程序,该程序需要能够在 Windows 7 Explorer 的新 ItemsView 控件中获取热门项目的索引。幸运的是,Microsoft 提供了一种通过 UI 自动化执行此操作的方法,即查询控件的自定义属性。
不幸的是,System.Windows.Automation 命名空间莫名其妙地似乎没有提供查询自定义属性的方法!这让我不得不完全放弃 C# 自动化命名空间并仅使用非托管 COM 版本。一种方法是将所有自动化代码放在一个单独的 C++/CLI 模块中,并从我的 C# 应用程序中调用它。但是,如果可能,我想避免使用此选项,因为它会向我的项目添加更多文件,并且我不得不担心 32/64 位问题等。
另一种选择是使用 ComImport 属性来声明相关接口并通过 COM-interop 完成所有操作。这就是我想做的。但是,IUIAutomation 和 IUIAutomationElement 等相关接口非常庞大。它们总共有数百种方法,并且引用了大量的接口(我假设我也必须声明),几乎所有这些我永远不会使用。我认为 UI 自动化接口也没有在任何类型库中声明,所以我不能使用 TLBIMP。
有什么方法可以避免手动将 bajillion 方法签名转换为 C#,而只声明我实际需要的十个左右的方法?我看到 C# 4.0 添加了一种新的“动态”类型,它应该可以简化 COM 互操作;这和我的问题有关系吗?
谢谢