赞
踩
Hello 朋友们大家好,我是J3ME,最近正在开发一个微信机器人项目,在开发之前尝试找了许多资料,结果发现针对C# .NET开发微信机器人的项目,不论是开源还是闭源的都算是比较少,(甚至是其他语言,目前开源能用的也是比较少),目前主流的两种开发思路:一是HOOK,二是Web协议(包括统信OS)。这两种开发思路缺点都比较明显,那么今天我来给大家分享一种比较特别的开发思路,基于UIAutomation(UI自动化)来实现PC端微信机器人的开发。
在正式开发之前,我们需要先整合一下基本的业务需求和所需要用到的工具。我将最基础的开发流程、功能列表和相关工具归纳如下:
开发流程:编写功能接口==>调用接口==>接入项目。
功能列表:1.获取机器人管理员ID(昵称);2.获取当前聊天记录;3.获取当前聊天对象ID(昵称);4.获取最新消息;5.获取通讯录;6.自动发送消息。
工具:Visualstudio 2022,UIAutomation库(这次给大家演示的的是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。截图:
谢谢大家阅读,下期再见~~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。