当前位置:   article > 正文

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

flaui 微信

        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,编写代码的时候会自动添加引用啦):

  1. using FlaUI.Core;
  2. using FlaUI.Core.AutomationElements;
  3. using FlaUI.Core.Conditions;
  4. using FlaUI.Core.Definitions;
  5. using FlaUI.Core.Input;
  6. using FlaUI.Core.WindowsAPI;
  7. using FlaUI.UIA3;
  8. using FlaUI.UIA3.Identifiers;

         初始化FlaUIAutomation库:

  1. private static Process[] processes = Process.GetProcessesByName("WeChat");//WeChat进程
  2. public static Window WeChatWindow;//WeChat窗口
  3. //FlaUIAutomation初始化
  4. static FlaUIAutomation()
  5. {
  6. //将程序附加到微信进程
  7. using (var app = Application.Attach(processes.First().Id))
  8. {
  9. //使用 UIA3Automation 创建 UI Automation 实例
  10. using (var automation = new UIA3Automation())
  11. {
  12. //获取微信应用程序的主窗口
  13. WeChatWindow = app.GetMainWindow(automation);
  14. }
  15. }
  16. }

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

  1. public static string GetUserName()
  2. {
  3. using (var automation = new UIA3Automation())
  4. {
  5. //定位工具栏
  6. var ToolBarParent = WeChatWindow.FindFirstDescendant(cf => cf.ByLocalizedControlType("工具栏"));
  7. //获取工具栏下所有子元素的第一个子元素
  8. var UserNameElement = ToolBarParent.FindAllChildren().FirstOrDefault();
  9. //判断获取到的值是否有效
  10. if (!string.IsNullOrEmpty(UserNameElement.Properties.Name.ToString()))
  11. {
  12. Console.WriteLine(UserNameElement.Properties.Name.ToString());
  13. return UserNameElement.Properties.Name.ToString();
  14. }
  15. else
  16. {
  17. return null;
  18. }
  19. }
  20. }

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

  1. static void Main(string[] args)
  2. {
  3. while (true)
  4. {
  5. var key = Console.ReadKey(true);
  6. //按下数字键1运行代码
  7. switch (key.Key)
  8. {
  9. case ConsoleKey.NumPad1:
  10. FlaUIAutomation.GetUserName();
  11. break;
  12. Console.WriteLine("-----------------");
  13. break;
  14. }
  15. }
  16. }

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/105133
推荐阅读
相关标签
  

闽ICP备14008679号