C# .NET基于FlaUIAutomation开发PC端微信机器人#1

本文介绍了如何利用C#.NET和UIAutomation库,特别是FlaUIAutomation,来开发微信机器人。开发者分享了一种基于UI自动化实现PC端微信机器人的新思路,包括获取管理员昵称、聊天记录等基本功能,并推荐了AutomationSpy工具来辅助分析微信窗口元素结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        Hello 朋友们大家好,我是J3ME,最近正在开发一个微信机器人项目,在开发之前尝试找了许多资料,结果发现针对C# .NET开发微信机器人的项目,不论是开源还是闭源的都算是比较少,(甚至是其他语言,目前开源能用的也是比较少),目前主流的两种开发思路:一是HOOK,二是Web协议(包括统信OS)。这两种开发思路缺点都比较明显,那么今天我来给大家分享一种比较特别的开发思路,基于UIAutomation(UI自动化)来实现PC端微信机器人的开发。

        在正式开发之前,我们需要先整合一下基本的业务需求和所需要用到的工具。我将最基础的开发流程、功能列表和相关工具归纳如下:

        开发流程:编写功能接口==>调用接口==>接入项目

        功能列表:1.获取机器人管理员ID(昵称);2.获取当前聊天记录;3.获取当前聊天对象ID(昵称);4.获取最新消息;5.获取通讯录;6.自动发送消息

        工具:Visualstudio 2022UIAutomation库(这次给大家演示的的是FlaUIAutomation库),也可以使用Microsoft 原生的UIAutomation(文档支持很丰富)。

        准备好了吗,让我们开始吧!首先安装FlaUIAutomation库,我选择的是UIA3:

         新建一个功能类,凭个人编码风格和爱好,这边建议大家单独建一个类,保持良好的代码规范利于项目的开发:

         接下来添加对FlaUIAutomation库的引用和初始化FlaUIAutomation(无需单独using,编写代码的时候会自动添加引用啦):

using FlaUI.Core;
using FlaUI.Core.AutomationElements;
using FlaUI.Core.Conditions;
using FlaUI.Core.Definitions;
using FlaUI.Core.Input;
using FlaUI.Core.WindowsAPI;
using FlaUI.UIA3;
using FlaUI.UIA3.Identifiers;

         初始化FlaUIAutomation库:

        private static Process[] processes = Process.GetProcessesByName("WeChat");//WeChat进程
        public static Window WeChatWindow;//WeChat窗口

        //FlaUIAutomation初始化
        static FlaUIAutomation()
        {
            //将程序附加到微信进程
            using (var app = Application.Attach(processes.First().Id))
            {
                //使用 UIA3Automation 创建 UI Automation 实例
                using (var automation = new UIA3Automation())
                {
                    //获取微信应用程序的主窗口
                    WeChatWindow = app.GetMainWindow(automation);
                }
            }
        }

        获取机器人管理员ID(昵称),因为要使用当前运行的账户做测试,所以当前获取的是自己本身的昵称:

        public static string GetUserName()
        {
            using (var automation = new UIA3Automation())
            {
                //定位工具栏
                var ToolBarParent = WeChatWindow.FindFirstDescendant(cf => cf.ByLocalizedControlType("工具栏"));
                //获取工具栏下所有子元素的第一个子元素
                var UserNameElement = ToolBarParent.FindAllChildren().FirstOrDefault();
                //判断获取到的值是否有效
                if (!string.IsNullOrEmpty(UserNameElement.Properties.Name.ToString()))
                {
                    Console.WriteLine(UserNameElement.Properties.Name.ToString());
                    return UserNameElement.Properties.Name.ToString();
                }
                else
                {
                    return null;
                }
            }
        }

        接下来,运行代码,查看结果:

        static void Main(string[] args)
        {
            while (true)
            {
                var key = Console.ReadKey(true);
                //按下数字键1运行代码
                switch (key.Key)
                {
                    case ConsoleKey.NumPad1:
                        FlaUIAutomation.GetUserName();
                        break;
                        Console.WriteLine("-----------------");
                        break;
                }
            }
        }

         好啦,我们本节的分享到此结束,在结束之前,我向大家推荐一款工具,用以分析微信窗口的元素结构,因为大家应该也看出来了,我们所有的功能实现几乎都是基于微信本身元素树的结构,所以想让接下来的开发更加高效便捷,对于元素的结构分布的了解是非常有必要的,工具名称:AutomationSpy。截图:

        谢谢大家阅读,下期再见~~ 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值