2016-11-08 125 views
6

我真的很想知道,Inspect.exe如何获取它的UI元素,因为它比UISpy获得更多元素(两种版本均可在Microsoft Windows SDK 7中使用)UISpy.exe和Inspect.exe有什么区别? (来自Microsoft Windows SDK)

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

2)Inspect.exe使用哪个库? 因为它显示了一个应用程序的一些UI元素,例如MacromediaFlashPlayerActiveX,我需要在我自己的UI-Automation-Application中获得它,希望有人知道它的一些事情。

编辑:检查也有一个“UI自动化”模式,它也使用UIAutomation库吗?奇怪的是,在Inspect中,它显示出比UISpy更多的元素。

预先感谢您

+0

不是真的重复,但[这是我的一个相关的老问题,可能会给一些信息](http://stackoverflow.com/questions/9282275/automationelement-shows-up-using-inspect-exe-but -does秀 - 不上时,使用-UIA)。 –

+0

UISpy [已宣布已过时](https://msdn.microsoft.com/en-us/library/ms727247(v = vs.110).aspx),Inpect是推荐的替代品。你在微软内部看到了非常不同的部门之间的摩擦,它是一个非常大的公司。 UI Automation是Windows组织的责任,他们不喜欢由服务器和工具拥有的.NET。不幸的是,WinRT的崩溃并没有让他们失望。如果你的目标是.NET,那么UISpy是你可以用System.Windows.Automation命名空间做什么的最准确的反映。 –

回答

11

UISpy是使用.NET的UIAutomation组件上.NET程序。这些程序集与.NET Framework 2一起引入。

Inspect是一个本机使用UIAutomationCore.dll(可在System目录中获得)的程序。 UIAutomationCore是一个原生 COM Windows DLL,实现了UI Automation Windows API。这个API已经升级到Windows,例如这里是Windows 8+改进的链接:What's New in UI Automation?

.NET的UIAutomation程序集在内部使用UIAutomationCore.dll。但是,Microsoft从未将它们升级到原生UI Automation API的新功能。因此,如果您使用原始的.NET UIAutomation,很多属性(例如所有ARIA属性非常有用),模式,事件等都会丢失。

但是,.NET世界仍然有希望,因为这里有一个项目:https://uiacomwrapper.codeplex.com/这是.NET UIAutomation的源代码兼容的更新版本(它实际上是由微软的一个人编写的,不要理解他们为什么不以更官方的方式发布它,并升级.NET的UIAutomation ...)。它定义了大多数新的Windows 8属性,模式和接口。