2017-01-04 15 views
1

なぜUIAutomationがクロムのコンテキストメニュー要素を取得できないのですか?Microsoft ui-automationがクロムのコンテキストメニュー要素を取得できません

C#コード: 以下のコードは、ルート要素を購読します。

public void SubscribeToInvoke() 
     { 
      Automation.AddAutomationEventHandler(AutomationElement.MenuOpenedEvent, 
        AutomationElement.RootElement, 
        TreeScope.Descendants, UIAEventHandler); 

      Automation.AddAutomationEventHandler(AutomationElement.MenuClosedEvent, 
        AutomationElement.RootElement, 
        TreeScope.Descendants, UIAEventHandler); 
     } 

怒鳴るイベントは、Googleのクロムの場合には解雇されていませんが、それ以外の場合(すなわち、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) 
      { 
      } 
     } 

コードの変更が必要か、この問題の代替ソリューションはありますか?

答えて

2

私はFromPoint()というメソッドを使用してこのタスクを達成しました。私の使用例は右クリックしてイベントを貼り付けることでした。

ステップ1:メニューオープンとクローズイベント登録:

public void SubscribeToInvoke() 
     { 
      Automation.AddAutomationEventHandler(AutomationElement.MenuOpenedEvent, 
        AutomationElement.RootElement, 
        TreeScope.Descendants, UIAEventHandler); 

Automation.AddAutomationEventHandler(AutomationElement.MenuClosedEvent, 
        AutomationElement.RootElement, 
        TreeScope.Descendants, UIAEventHandler); 
     } 

ステップ2:あなたのマウスの現在位置を取得し、MenuCloseEventの革砥タイマーになり、タイマーをスタートMenuOpenedEvent。

if (e.EventId == AutomationElement.MenuOpenedEvent) 
      { 
       timer_Chrome.Enabled = true; 
      } 
      else if (e.EventId == AutomationElement.MenuClosedEvent) 
      { 
       timer_Chrome.Enabled = false; 
      } 

ステップ3:マウスの位置にある要素を取得します

  System.Windows.Point point = new System.Windows.Point(Cursor.Position.X, Cursor.Position.Y); 
      AutomationElement sourceElement = AutomationElement.FromPoint(point); 
関連する問題