UISpy.exe 和 Inspect.exe 有什么区别? (来自微软 Windows SDK)

What's the difference of UISpy.exe and Inspect.exe? (From Microsoft Windows SDK)

我真的很想知道,Inspect.exe 是如何获取它的 UI 元素的,因为它获取的元素远远多于 UISpy(两者都在 Microsoft Windows SDK 7).

1) 我认为 UISpy 通过 UIAutomation 库获取元素,对吧? (尝试使用 UIAutomation 并获得与 UISpy 显示的完全相同的元素)。

2) Inspect.exe 使用哪个库? 因为它显示了一些 UI-例如带有 MacromediaFlashPlayerActiveX 的应用程序元素,我需要在我自己的 UI-Automation-Application 中获取这些元素,希望有人对此有所了解。

编辑:Inspect 也有一个 "UI Automation" 模式,它是否也使用 UI 自动化库?奇怪的是,在 Inspect 中它还显示了比 UISpy.

更多的元素

UISpy 是一个 .NET 程序,它使用 .NET 的 UI 自动化程序集。这些程序集是在 .NET Framework 2 中引入的。

Inspect 是使用 UIAutomationCore.dll 的 native 程序(在系统目录中可用)。 UIAutomationCore 是实现 UI Automation Windows API. This API has been upgraded with Windows, for example here is a link to Windows 8+ improvements: What's New in UI Automation?

native COM Windows DLL

.NET 的 UI 自动化程序集在内部使用 UIAutomationCore.dll。但是,Microsoft 从未将它们升级到原生 UI 自动化 API 的新功能。如果您使用原始 .NET 的 UIAutomation.

,那么很多属性(例如所有非常有用的 ARIA 属性)、模式、事件等都会丢失

但是,.NET 世界仍然有希望,因为这里有一个项目:https://uiacomwrapper.codeplex.com/ 这是一个源代码兼容的更新版本的 .NET UIAutomation(它一直在事实上由 Microsoft 人员编写,我不明白他们为什么不以更正式的方式发布它并升级 .NET 的 UIAutomation...)。它定义了最新的 Windows 8 个属性、模式和接口。