栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

C# 使用Flaui进行应用程序自动化 - 点击元素

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C# 使用Flaui进行应用程序自动化 - 点击元素

前言
上一个章节写了如何通过鼠标点击的方式获取FlaUi元素。

具体查看文章:C# 使用Flaui进行应用程序自动化 - 选取元素

这篇文章写一下当获取到Flaui元素后,如何通过元素进行鼠标点击/模拟点击操作。

鼠标点击

  1. 首先可以直接使用AutomationElement里的Click函数,但是经过测试发现部分元素使用此函数会直接报错。
  2. 由于内置的Click函数有可能出现报错的情况,所以使用WindowsApi来解决,可以灵活运用Api完成如鼠标双击、右击、移动鼠标等操作,文章里面示例了鼠标左键单击操作。
        [DllImport("user32.dll")]
        internal extern static bool SetCursorPos(int x, int y);

        [DllImport("user32.dll")]
        internal extern static void mouse_event(int a, int x, int y, int d, int e);

        [DllImport("user32.dll", EntryPoint = "ShowCursor", CharSet = CharSet.Auto)]
        internal static extern void ShowCursor(int status);

        [DllImport("user32.dll")]
        internal extern static IntPtr GetTopWindow();

        protected const int MOUSEEVENTF_MOVE = 0x0001;
        protected const int MOUSEEVENTF_LEFTDOWN = 0x0002;
        protected const int MOUSEEVENTF_WHEEL = 0x800;
        protected const int MOUSEEVENTF_LEFTUP = 0x0004;
        protected const int MOUSEEVENTF_RIGHTDOWN = 0x0008;
        protected const int MOUSEEVENTF_RIGHTUP = 0x0010;
        protected const int MOUSEEVENTF_MIDDLEDOWN = 0x0020;
        protected const int MOUSEEVENTF_MIDDLEUP = 0x0040;
        protected const int MOUSEEVENTF_ABSOLUTE = 0x8000;

        public static void Click(AutomationElement element)
        {
            Rectangle rect=element.BoundingRectangle;
            int X = rect.Left + rect.Width / 2;
            int Y = rect.Top + rect.Height / 2;
            Thread.Sleep(100);
            //光标定位到元素上
            SetCursorPos(X, Y);
            Thread.Sleep(100);
            //Make the left mouse down and up.
            //按下鼠标左键
            mouse_event(MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);
            mouse_event(MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
        }

效果如下图:

模拟点击

有时存在Click或者WinAPI无法点击到元素的情况,示例:
我的电脑屏幕显示如下图所示
当我选择网页下方的元素如下图所示,选择完成后,回到网页最上方

这时Click或者WindowsAPI就无法点击到。

            //判断元素是否支持模拟点击
            if (element.Patterns.Invoke.IsSupported && element.Patterns.Invoke.TryGetPattern(out var InvokePattern) && element.IsEnabled)
            {
                //模拟点击
                InvokePattern.Invoke();
            }

使用模拟点击,效果图如下所示.


使用模拟点击就能正常点击到按钮。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/941789.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号