如何访问UI Spy看不到的元素,以使用C#自动化win32应用程序

我正在做一个C#
windows窗体应用程序,它使用System.
Windows.Automation类自动化另一个win32应用程序.

我需要阅读或交互一些元素,但是UISpy找不到这些字段,它只找到父容器面板.

例如,下面的代码块应返回许多工具条按钮,但不起作用:

var mainWindow = AutomationElement.RootElement.FindChildByNamePart("Back Office Control");
var mainWindowChildren = mainWindow.FindAll(TreeScope.Children, Condition.TrueCondition);
var toolBarPanel = mainWindowChildren[1];
var toolBarItens = toolBarPanel.FindAll(TreeScope.Children, Condition.TrueCondition);

还有另一种方法吗?

最佳答案 正如您刚刚发现的那样,工具条按钮实际上并不是Windows消息传递世界中的单独控件.菜单项和其他一些控件也是如此.

要使用Windows消息进行单击,您需要将WM直接发送到工具栏,而不是按钮,例如TB_PRESSBUTTON(http://msdn.microsoft.com/en-us/library/windows/desktop/bb787389(v=vs.85).aspx).

您必须使用针对工具栏的SendMessage WinAPI函数(您可以像往常一样获取hWnd),TB_PRESSBUTTON作为消息类型,命令标识符作为wParam,1作为lParam.

点赞