如何捕获UIAutomation事件

时间:2018-01-18 12:37:08

标签: c# ui-automation microsoft-ui-automation

我需要监控Google Chrome网址文本框中的更改。我有代码找到url并正确读取它。

     AutomationElement elementx = element.FindFirst(System.Windows.Automation.TreeScope.Descendants, conditions);
  return ((ValuePattern)elementx.GetCurrentPattern(ValuePattern.Pattern)).Current.Value as string;

elementx是url文本栏,返回了url

现在 我需要监视url文本栏以查看文本更改。我在stackoverflow上找到了一些代码,但它不起作用。 Handling ProgressBar's Value change with UIAutomation

我使用了一个名为accevent.exe的应用程序,并且看到确实可以监视文本更改,如截图所示。 所以基本上我需要一种方法来监控和报告对URL文本的更改。

using accevent to monitor for changes

以下是一些设置enter image description here

1 个答案:

答案 0 :(得分:0)

 ValuePattern chromeValuePattern;
  AutomationPropertyChangedEventHandler propChangeHandler = null;

  chromeValuePattern = elementx.GetCurrentPattern(ValuePattern.Pattern) as ValuePattern;

                propChangeHandler += new AutomationPropertyChangedEventHandler(OnPropertyChange);
                Automation.AddAutomationPropertyChangedEventHandler(elementx,
                    System.Windows.Automation.TreeScope.Subtree, propChangeHandler,
                    AutomationProperty.LookupById(UIA_PropertyIds.UIA_ValueValuePropertyId));



   private void OnPropertyChange(object src, AutomationPropertyChangedEventArgs e)
        { 
            AutomationElement sourceElement = src as AutomationElement;

            if (e.Property == AutomationProperty.LookupById(UIA_PropertyIds.UIA_ValueValuePropertyId))
            {

                Debug.WriteLine(e.NewValue);

            }
            else
            {

            }
        }