我正在开发一个使用UI自动化的小应用程序,它位于第三方应用程序的顶部,用于拦截某些事件,并在输入字段中注入和提取值。另一个应用程序似乎在WPF中使用ContentControl在一个窗口内显示所有不同的屏幕。我的所有代码似乎都运行良好,如果它预期的控制已存在。在这一点上,我试图通过在创建按钮时添加按钮单击自动化处理程序将所有内容绑定在一起,但我不确定最佳方法。
如果我在创建按钮时调用此代码,我现在可以捕获外部应用程序中的按钮单击事件:
var cond = new PropertyCondition(AutomationElement.NameProperty, "SearchButton");
var searchButtonElement = _rootWindowElement?.FindFirst(TreeScope.Descendants, cond);
Automation.AddAutomationEventHandler(InvokePattern.InvokedEvent, searchButtonElement, TreeScope.Element, ((o, args) =>
{
MessageBox.Show("Hello World");
}));
如果该屏幕已经启动并显示该按钮,则一切正常,但如果尚未实例化,则searchButtonElement
为空。对我来说,等待“SearchButton”按钮变为实例化和有效的最佳方式是什么,所以我可以将自动调用处理程序附加到它?
此外,当处理程序不再可用时,最好的方法是分离我的处理程序(......甚至是必要的)?
基本上,外部应用程序在主菜单屏幕上启动,单击“显示搜索屏幕”按钮后,我需要在单击下一个屏幕的“搜索”按钮时运行代码。
由于