5

我正在做一个 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);

还有另一种方法可以做到这一点吗?

4

2 回答 2

3

正如您刚刚发现的那样,工具条按钮实际上并不是 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。

于 2014-01-08T15:58:26.690 回答
0

您需要使用 Win32 调用来实现这一点。GetWindow 做到了

帮助信息 - http://msdn.microsoft.com/en-us/library/windows/desktop/ms633515%28v=vs.85%29.aspx

[DllImport("user32.dll")] public static extern int GetWindow(int hwnd,int wCmd); 
于 2014-01-08T15:21:06.767 回答