在使用Windows UI Automation的时候,要查找某一UI元素,通常要先获取一个RootElement——桌面。其他所有的Element都是基于RootElement之上。该如何获取RootElement呢?
[Reflection.Assembly]::LoadWithPartialName("UIAutomationClient")
$rootElement = ([Windows.Automation.AutomationElement]::RootElement)
如果按照如上的方式加载Assembly,可以获得到RootElement,但是RootElement中的信息很不完整,甚至是严重的缺失,几乎不能正常使用
发生这种问题的原因是,UIAutoimation的API只能够在STA(Single-Thread Apartment)环境中运行,而powershell目前只能在MTA(Multi-Thread Apartment)环境中运行,而且不能够进行切换,导致运行时不兼容。有关STA和MTA可以参考 MSDN中Apartment的定义 或者
[Reflection.Assembly]::LoadWithPartialName("UIAutomationClient")
$rootElement = ([Windows.Automation.AutomationElement]::RootElement)
如果按照如上的方式加载Assembly,可以获得到RootElement,但是RootElement中的信息很不完整,甚至是严重的缺失,几乎不能正常使用
发生这种问题的原因是,UIAutoimation的API只能够在STA(Single-Thread Apartment)环境中运行,而powershell目前只能在MTA(Multi-Thread Apartment)环境中运行,而且不能够进行切换,导致运行时不兼容。有关STA和MTA可以参考 MSDN中Apartment的定义 或者