Способы определения, находится ли кликаемый элемент под указателем мыши в любом пользовательском интерфейсе. - PullRequest
0 голосов
/ 15 ноября 2018

Я использую C # для разработки приложений, и мое требование состоит в том, чтобы автоматизировать щелчок мышью на любом активном элементе. Например, , если указатель мыши находится над каким-либо значком в проводнике или на рабочем столе или если указатель мыши находится на элементе любого элемента приложения / пользовательском интерфейсе, скажем, в течение некоторого интервала времени (например, 3 секунды), мое приложение должно получить уведомление / обратный вызов или есть какой-либо способ определить, находится ли значок на элементе пользовательского интерфейса, на который можно нажимать, или каким-либо другим способом сделать то же самое.

1 Ответ

0 голосов
/ 22 ноября 2018

После некоторых исследований я смог достичь этого с помощью АВТОМАТИЗАЦИЯ ИНТЕРФЕЙСА благодаря @Fixation. Я использую InvokePattern для кнопок, TextPattern для EditBoxes и TableItemPattern для таблиц.

Ниже приведен код:

static void main(int[] args)
{
    while (true)
    {
        System.Drawing.Point mouse = System.Windows.Forms.Cursor.Position; 
        AutomationElement element = AutomationElement.FromPoint(new System.Windows.Point(mouse.X, mouse.Y));
        if (element == null)
        {
            // no element under mouse
            return;
        }

        Console.WriteLine("Element at position " + mouse + " is '" + element.Current.Name + "'");

        object pattern;
        if (element.TryGetCurrentPattern(ValuePattern.Pattern, out pattern))
        {
            ValuePattern valuePattern = (ValuePattern)pattern;

            Console.WriteLine(" Value=" + valuePattern.Current.Value);
        }

        if (element.TryGetCurrentPattern(InvokePattern.Pattern, out pattern))
        {
            InvokePattern invokePattern = (InvokePattern)pattern;

            //invokePattern.Invoke();
            Console.WriteLine(" invokePattern=" + invokePattern.ToString());
        }

        if (element.TryGetCurrentPattern(TableItemPattern.Pattern, out pattern))
        {
            TableItemPattern tableItemPattern = (TableItemPattern)pattern;

            Mouse.MoveTo(new Point(mouse.X, mouse.Y));
            Mouse.Click(MouseButton.Left); // Install Microsoft.TestApi from Nuget

            Console.WriteLine(" TableItemPattern=" + tableItemPattern.ToString());
        }  
        Thread.Sleep(1000);
    }
}

Надеюсь, это поможет !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...