S.H*_*oor 5 c# winapi ui-automation
我尝试向另一个应用程序中的按钮发送单击消息(或调用).
我使用UISpy.exe,可以找到我需要的元素.
但它没有id,没有clickablePoint,也没有Invoke模式.
我试过以下代码:
var processStartInfo = new ProcessStartInfo(@"tdesktop\Program.exe");
var proc = Process.Start(processStartInfo);
Thread.Sleep(3000);
AutomationElement mainWin = AutomationElement.RootElement.FindChildByProcessId(proc.Id);
List<AutomationElement> elmList= GetChildren(mainWin);
//MessageBox.Show(elmList.Count.ToString());
if (elmList.Count == 7)
{
List<AutomationElement> menubar= GetChildren(elmList[6]);
AutomationElement elementNode = menubar[1];
double x = elementNode.GetClickablePoint().X;
double y = elementNode.GetClickablePoint().Y;
win32 w = new win32();
w.move_left_click((UInt32)x, (UInt32)y);
}
Run Code Online (Sandbox Code Playgroud)
它在elementNode.GetClickablePoint().X中抛出一个异常,即Autumation Element没有可点击的点.
我也试过TryGetInvokePattern()但仍然抛出execption它没有InvokePattern.
我使用VS2012和.net 4.5
有没有办法做到这一点?
小智 5
正如已经建议的那样,我强烈建议将Inspect SDK工具指向您感兴趣的UI.工具(inspect.exe)可以在"C:\ Program Files(x86)\ Windows Kits\8.1"等地方找到.\BIN\64" .
通过使用该工具,您可以看到如何以编程方式公开感兴趣的UI元素.例如,它是作为单个UIA元素公开的,还是一个更大的UIA元素的一部分,它表示一组可视化的UI元素,它支持哪些UIA模式?作为测试,我只是指向Inspect中的一个箭头形状.结果如下所示.
所以我可以告诉箭头以编程方式暴露为单个UIA元素,并且它支持Invoke模式.这意味着我可以通过UIA以编程方式调用按钮.(我可以在Inspect的Action菜单中调用元素上的模式方法,这非常方便.)如果UIA元素不支持任何允许我以编程方式控制它的模式,我可以通过UIA找到它的BoundingRectangle属性,并在其中间模拟鼠标单击以调用它.(当我模拟鼠标点击时,我假设按钮没有被遮挡.)
但是如果我看一下屏幕上可视化显示的另一组元素,使用Inspect我可以了解整个集合是通过UIA作为单个UIA元素公开的.因此,在下面显示的Inspect图像中,我可以了解到我无法以编程方式调用该组中的特定颜色.
所以在这种情况下,我可能不得不假设我知道在该组中可视化显示的UI元素的大小和布局,并根据我想要调用的颜色模拟鼠标点击,我觉得这是合适的.
通过使用Inspect,我可以很好地理解我的选择.理想情况下,屏幕上可视化显示的单个元素将通过UIA作为单个元素公开,我可以通过任何相关的模式来控制(例如,Invoke,Toggle,SelectionItem等).但是如果不支持有用的模式,那么我可以考虑模拟鼠标点击,而不是基于ClickablePoint或BoundingRectangle数据公开的内容.
谢谢,
家伙
菜单栏不公开 InvokePattern (请参阅菜单栏控件类型的 UI 自动化支持)。但是,可以调用菜单项(请参阅MenuItem 控件类型的 UI 自动化支持)。
以下代码说明了如何生成菜单项列表:
AutomationElementCollection items = menubar.FindAll(
TreeScope.Children,
new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.MenuItem));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6860 次 |
| 最近记录: |