我想打开一个Windows应用程序,然后按"保存屏幕"工具栏中的按钮:
使用Visual Studio中的Spy ++,我可以获得此工具栏的以下属性:
根据以上信息,我试过这个:
Application app = Application.Attach(7492); //The process was manually opened
Window window = app.GetWindow("Scope Link - Virtual Instrument", InitializeOption.Nocache);
SearchCriteria sc = SearchCriteria.ByClassName("ToolbarWindows32"); //AutomationID is 59392
var saveBtn = window.Get(sc);
saveBtn.Click();
使用上面的代码,程序能够找到工具栏,但它只需单击工具栏中间,即左侧的第9个图标("打印预览"按钮{{ 0}})。
我也试过SearchCriteria.ByText("Save Screen")
,但这给了我错误。
那么怎么能让鼠标点击我想要的按钮呢?是否有可以调整的鼠标点击坐标偏移量?
答案 0 :(得分:4)
问题是工具栏上的所有按钮都有相同的ClassName - ToolbarWindows32。
尝试找到工具栏上的所有按钮,然后按索引获取。
toolbar.GetMultiple(SeacrhCriteria.ByControlType(ControlType.Button))[INDEX].Click();
通常,您可以使用原生UI自动化:
1)找到工具栏:
var toolbar = window.Get(SearchCriteria.ByClassName("ToolbarWindows32"));
2)获取工具栏的自动化元素:
AutomationElement toolbarAe = toolbar.AutomationElement;
3)获取此AutomationElement的所有子项。
var listAeChildren = toolbarAe.findAll(Treescope.Children, new PropertyCondition(AutomationElement.ControltypeProperty, ControlType.Button));
4)从列表中找到您的按钮并进入Point
var clickablePoint = new Point();
foreach(AutomationElement button : listAeChildren)
{
if(button.Current.Name.Equals("Save Screen"))
{
clickablePoint = button.GetClickablePoint();
}
}
5)点击点:
Mouse.Instance.Click(clickablePoint);
检查代码原因我是在没有IDE的情况下从内存中写的:)