我正在尝试使用以下方法获取自动化元素:
var automationElement = AutomationElement.FromPoint(location);
我得到了错误。
COM 异常未处理:无法进行传出调用,因为应用程序正在调度输入同步调用。(Exception from HRESULT: 0x8001010D (RPC_E_CANTCALLOUT_ININPUTSYNCCALL))
任何人都可以帮我解决这个问题......
我正在尝试使用以下方法获取自动化元素:
var automationElement = AutomationElement.FromPoint(location);
我得到了错误。
COM 异常未处理:无法进行传出调用,因为应用程序正在调度输入同步调用。(Exception from HRESULT: 0x8001010D (RPC_E_CANTCALLOUT_ININPUTSYNCCALL))
任何人都可以帮我解决这个问题......
这很可能是线程问题。如果您的程序试图在自己的用户界面中查找元素,则需要在单独的线程中进行。试试这个:
var automationElement;
Thread thread = new Thread(() =>
{
automationElement = AutomationElement.FromPoint(location);
});
thread.Start();
thread.Join();
// now automationElemnt is set
它第一次工作,但之后就没有工作了....
我已经使用 mousehook 在鼠标单击时获取对象的属性。这是代码。
private AutomationElement GetAutomationElementFromPoint(Point location)
{
AutomationElement automationElement =null;
Thread thread = new Thread(() =>
{
automationElement = AutomationElement.FromPoint(location);
});
thread.Start();
thread.Join();
return automationElement;
}
private void mouseHook_MouseClick(object sender, MouseEventArgs e)
{
AutomationElement element = GetAutomationElementFromPoint(new System.Windows.Point(e.X, e.Y));
//Thread.Sleep(900);
if (element != null)
{
textBox1.Text = "Name: " + element.Current.Name + " ID: " + element.Current.AutomationId + " Type: " + element.Current.LocalizedControlType;
}
else
textBox1.Text = "Not found";
}
在第一次单击时,它给出了值,但在下一次单击时,即使元素不为空,它也会给出空白值。
有什么问题?