Microsoft ui-自动化无法获取 chrome 的上下文菜单元素
Microsoft ui-automation not able to fetch chrome's context menu elements
为什么 UIAutomation 无法获取 chrome 的上下文菜单元素。
C#代码:
下面的代码将订阅根元素。
public void SubscribeToInvoke()
{
Automation.AddAutomationEventHandler(AutomationElement.MenuOpenedEvent,
AutomationElement.RootElement,
TreeScope.Descendants, UIAEventHandler);
Automation.AddAutomationEventHandler(AutomationElement.MenuClosedEvent,
AutomationElement.RootElement,
TreeScope.Descendants, UIAEventHandler);
}
波纹管事件在 google chrome 的情况下没有被触发,但在其他情况下(即 IE 或 Firefox 或任何其他应用程序)它没问题。
private void UIAEventHandler(object sender, AutomationEventArgs e)
{
AutomationElement sourceElement;
sourceElement = sender as AutomationElement;
if (e.EventId == AutomationElement.MenuOpenedEvent)
{
}
else if (e.EventId == AutomationElement.MenuClosedEvent)
{
}
}
是否需要更改任何代码或是否有针对此问题的替代解决方案?
我通过使用称为 FromPoint() 的方法完成了这项任务。我的用例是获得右键单击和粘贴事件。
第一步:订阅菜单打开关闭事件:
public void SubscribeToInvoke()
{
Automation.AddAutomationEventHandler(AutomationElement.MenuOpenedEvent,
AutomationElement.RootElement,
TreeScope.Descendants, UIAEventHandler);
Automation.AddAutomationEventHandler(AutomationElement.MenuClosedEvent,
AutomationElement.RootElement,
TreeScope.Descendants, UIAEventHandler);
}
第 2 步:当 MenuOpenedEvent 启动计时器时,它将获取鼠标的当前位置,并在 MenuCloseEvent 上触发计时器。
if (e.EventId == AutomationElement.MenuOpenedEvent)
{
timer_Chrome.Enabled = true;
}
else if (e.EventId == AutomationElement.MenuClosedEvent)
{
timer_Chrome.Enabled = false;
}
第三步:获取鼠标所在位置的元素
System.Windows.Point point = new System.Windows.Point(Cursor.Position.X, Cursor.Position.Y);
AutomationElement sourceElement = AutomationElement.FromPoint(point);
为什么 UIAutomation 无法获取 chrome 的上下文菜单元素。
C#代码: 下面的代码将订阅根元素。
public void SubscribeToInvoke()
{
Automation.AddAutomationEventHandler(AutomationElement.MenuOpenedEvent,
AutomationElement.RootElement,
TreeScope.Descendants, UIAEventHandler);
Automation.AddAutomationEventHandler(AutomationElement.MenuClosedEvent,
AutomationElement.RootElement,
TreeScope.Descendants, UIAEventHandler);
}
波纹管事件在 google chrome 的情况下没有被触发,但在其他情况下(即 IE 或 Firefox 或任何其他应用程序)它没问题。
private void UIAEventHandler(object sender, AutomationEventArgs e)
{
AutomationElement sourceElement;
sourceElement = sender as AutomationElement;
if (e.EventId == AutomationElement.MenuOpenedEvent)
{
}
else if (e.EventId == AutomationElement.MenuClosedEvent)
{
}
}
是否需要更改任何代码或是否有针对此问题的替代解决方案?
我通过使用称为 FromPoint() 的方法完成了这项任务。我的用例是获得右键单击和粘贴事件。
第一步:订阅菜单打开关闭事件:
public void SubscribeToInvoke()
{
Automation.AddAutomationEventHandler(AutomationElement.MenuOpenedEvent,
AutomationElement.RootElement,
TreeScope.Descendants, UIAEventHandler);
Automation.AddAutomationEventHandler(AutomationElement.MenuClosedEvent,
AutomationElement.RootElement,
TreeScope.Descendants, UIAEventHandler);
}
第 2 步:当 MenuOpenedEvent 启动计时器时,它将获取鼠标的当前位置,并在 MenuCloseEvent 上触发计时器。
if (e.EventId == AutomationElement.MenuOpenedEvent)
{
timer_Chrome.Enabled = true;
}
else if (e.EventId == AutomationElement.MenuClosedEvent)
{
timer_Chrome.Enabled = false;
}
第三步:获取鼠标所在位置的元素
System.Windows.Point point = new System.Windows.Point(Cursor.Position.X, Cursor.Position.Y);
AutomationElement sourceElement = AutomationElement.FromPoint(point);