我正在尝试为自己调用com的应用程序自动化UI导航。
当我自动点击(运行搜索以查看哪些设备在线)时,我收到以下弹出错误:
由于应用程序正在调度输入同步调用,因此无法进行传出呼叫。
失败的代码行如下:
Get-UiaButton -AutomationId '136' -Class 'Button' -Name 'Search Now' -Win32 | Invoke-UIAButtonClick
我所做的研究表明它正在解决公寓问题。 Powershell 2原生在MTA中运行。虽然powershell 3/4本身在STA中运行。我尝试在两种环境中运行该命令,但它以同样的方式失败。
进一步的研究表明,正在尝试从错误类型的线程中发送SendMessage。我控制的唯一消息是Get-UIAButton
调用生成的消息。我尝试使用
[UIAutomation.Preferences]::UseElementsPatternObjectModel = $false
[UIAutomation.Preferences]::UseElementsSearchObjectModel = $false
然而,有两行仍然通过
Current : UIAutomation.UiElementInformation
__interceptors : {UIAutomation.MethodSelectorAspect, UIAutomation.ErrorHandlingAspect}
我找不到任何其他偏好,看起来他们会关闭其余的。
我尝试将输出重定向到| Out-Null
...但它仍会产生相同的错误。
我也试过在第二个PowerShell实例下运行该命令。
powershell.exe -mta -nologo -noprofile -executionpolicy bypass -command "ipmo C:\Users\Admin\Downloads\UIAutomation.0.8.7B3.NET35b\UIAutomation.dll; Get-UiaButton -AutomationId '136' -Class 'Button' -Name 'Search Now' -Win32 | Invoke-UIAButtonClick"
我不确定下一步该尝试什么。老实说,我可能会尝试使用Autoit自动执行此单击。