(17)自动采集微信聊天信息中的文件-微信UI自动化(.Net+C#)

整理 | 小耕家的喵大仙

出品 | CSDN(ID:lichao19897314)

Q Q | 978124155

往期知识回顾: 

(1)C#开启探索微信自动化之路-微信UI自动化

(2)C#创建微信窗体自动化实例-微信UI自动化

(3)C#针对系统热键管理-微信UI自动化

(4)C#采集微信通讯录和联系人-微信UI自动化

(5)C#实现针对微信窗体鼠标静默点击-微信UI自动化

(6)C#搜索微信通讯录联系人-微信UI自动化

(7)C#实现微信消息群发-微信UI自动化

(8)C#监控微信进程运行状态-微信UI自动化

(9)C#监控微信网络连接状态-微信UI自动化

(11)C#实现微信窗体尺寸跟随调整-微信UI自动化

(12)C#采集微信聊天记录及历史消息-微信UI自动化

(13)C#实现自动回复微信消息-微信UI自动化

(14)C#针对微信界面元素截图操作-微信UI自动化

(15)C#实现对微信窗体的行为管控-微信UI自动化

(16)C#实现微信多开-微信UI自动化

(17)C#实现微信聊天文件接收及下载-微信UI自动化

👆 以上文章是以往对使用自动化技术操作微信的一些文章及案例!!!!

应用场景浅析:

一位做工程建筑类的朋友通过博客咨询我,他说他平时工作微信消息中文档特别多,每天他需要花费很多时间进行收集和整理。所以他咨询我是否能自动判断聊天消息是否为文件,如果是文件的话就将文件名称,大小,文档所在路径提取出来,并按照一定的业务进行整理归档。

实现效果呈现:

本视频内容针对监听通讯录中的某一位或者多为联系人,自动分析消息是否是文件并在文件完成下载后显示下载已完成。

监听文件并下载归档

使用某个微信向本人微信发送一个名称为log.txt的文本文档。 

软件开启监听文件的功能,并显示有新文件到达,将文件名称,大小,存储路径,是否完成下载归档等信息输出。

将文档路径复制到资源管理器中做验证,发现log.txt存在本地。

经过验证,能满足建筑师朋友的需求。

技术实现:
  1. 通过实时监听聊天面板,通过消息主题,时间等关键信息比对,发现如果有信息到达,则进行下一步逻辑处理。
  2. 有新消息达到,则自动点击新消息的联系人UI对象,切换到与联系人的聊天窗口。
  3. 获取聊天窗口的最后一条消息对象,如果发现Name中包含[文件]关键字则进行下一步逻辑。
  4.  消息对象中包括了文件名称,大小,发送人等信息,将他们提取出来。
  5. 开启一个任务监听微信的文件夹,分析是否完成了下载归档操作。
代码片段:

微信是否产生新消息

 var currentChatList = UI_WX_Window.Current.Find("/Pane/Pane[1]/Pane[2]/Pane/Pane/Pane/List");
 if (currentChatList == null || currentChatList.ControlType != FlaUI.Core.Definitions.ControlType.List)
 {
     Thread.Sleep(1000);
     continue;
 }
 var source = currentChatList.FindAllChildren();
 var tempMessageSource = new List<WXFileMsgEntity>();
 source.ToList().ForEach(item =>
 {
     if (item.ControlType == FlaUI.Core.Definitions.ControlType.ListItem)
     {
         var buttonName = item.FindFirstByXPath("/Pane/Button")?.Name;
         var time = item.FindFirstByXPath("/Pane/Pane/Pane[1]/Text[2]")?.Name;
         var lastMessage = item.FindFirstByXPath("/Pane/Pane/Pane[2]/Text")?.Name;
         var count = item.FindFirstByXPath("/Pane/Text")?.Name;

         var messageitem = new WXFileMsgEntity { UserName = buttonName, Time = time, CurrentMessage = lastMessage, Count = count };
         tempMessageSource.Add(messageitem); 
         if (historyMessageSource != null)
         {
             var cnt = historyMessageSource.Count(s =>
             s.UserName == messageitem.UserName
             && s.CurrentMessage == messageitem.CurrentMessage
             && s.Time == messageitem.Time);
             if (cnt == 0)
             {
                 if (GetFileUsers.Count(ss => ss.Contains(messageitem.UserName)) > 0)
                 {
                     //切换窗口
                     UI_WX_Window.Current.ClickElement(item);
                     Thread.Sleep(200);
                     GetFile(messageitem);
                 }
             }
         }
     }
 });
 historyMessageSource = tempMessageSource;
 Thread.Sleep(1000);

获取文件信息

  private void GetFile(WXFileMsgEntity messageitem)
  {
      var chatHistoryList = UI_WX_Window.Current.Find("/Pane/Pane[2]/Pane/Pane/Pane/Pane/Pane[2]/Pane[1]/Pane/List");//聊天窗口
      if (chatHistoryList != null)
      {
          var source = chatHistoryList.FindAllChildren();
          int i = source.Count() - 1;
          var currentUI = source[i];
          var name = currentUI.Name;
          if (name.Contains("[文件]"))
          {
              var userName = currentUI.FindFirstByXPath("/Pane/Button");
              var fileName = currentUI.FindFirstByXPath("/Pane/Pane[1]/Pane/Pane/Pane/Pane/Pane[1]/Pane[1]/Text");
              var fileSize = currentUI.FindFirstByXPath("/Pane/Pane[1]/Pane/Pane/Pane/Pane/Pane[1]/Pane[1]/Pane/Text[1]");
              if (userName != null && fileName != null && fileSize != null)
              {
                  messageitem.FileName = fileName.Name;

                  messageitem.FileSize = fileSize.Name;

                  string absPath = "E:\\AppFiles\\WeChat Files\\WeChat Files\\wxid_bwalm3wpwz8o22\\FileStorage\\File\\" + DateTime.Now.ToString("yyyy-MM");

                  messageitem.FullFile = absPath + "\\" + messageitem.FileName;

                  SetMessage(messageitem.UserName + "有新文件传送给你,文件名:" + messageitem.FileName + " 尺寸:" + messageitem.FileSize + " 路径:" + messageitem.FullFile);

                  fileCheckSource.Add(messageitem);
              }
          }
      }
  }

文件是否归档 

            Thread fileCheck = new Thread(new ThreadStart(() =>
            {
                while (State == TaskState.Runing)
                {
                    foreach (var item in fileCheckSource)
                    {
                        if (item.IsDownLoad == false) {

                            if (System.IO.File.Exists(item.FullFile))
                            {
                                SetMessage(item.UserName + "的文件【"+item.FileName+"】已成功归档本地 " );
                                item.IsDownLoad=true;
                            }
                        }
                    }
                
                    Thread.Sleep(1000);
                }
            }));
            fileCheck.Start();
后续引导

如果读者对上述文章存在疑问或不清晰的地方可以找本人获取源码进行学习,QQ 978124155

上一篇 (16)PC微信UI自动化-微信多开(C#版本)icon-default.png?t=N7T8https://blog.csdn.net/lichao19897314/article/details/135425631下一篇 (18)C#采集微信群群成员列表信息-微信UI自动化(.Net)icon-default.png?t=N7T8https://blog.csdn.net/lichao19897314/article/details/136784971 

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以给你一些指导。 首先,你需要使用ASP.NETC#来创建一个Web应用程序。你可以使用Visual Studio来完成这个任务。在创建项目时,选择ASP.NET Web应用程序模板。 接下来,你需要安装QrCode.Net和ZXing.Net NuGet包。这些包将帮助你生成和解析二维码。 在你的页面,你可以使用QrCode.Net来生成二维码。你可以使用以下代码: ```csharp using QrCodeNet.Encoding; using QrCodeNet.Encoding.Windows.Render; using System.Drawing; // Generate QR code var encoder = new QrEncoder(ErrorCorrectionLevel.M); var code = encoder.Encode("Hello World!"); var renderer = new GraphicsRenderer(new FixedModuleSize(5, QuietZoneModules.Two), Brushes.Black, Brushes.White); var stream = new MemoryStream(); renderer.WriteToStream(code.Matrix, ImageFormat.Png, stream); stream.Position = 0; // Display QR code on page var img = new System.Web.UI.WebControls.Image(); img.ImageUrl = "data:image/png;base64," + Convert.ToBase64String(stream.ToArray()); ``` 在这个例子,我们使用了QrCode.Net来生成一个包含“Hello World!”文本的二维码,并将其显示在一个ASP.NET页面上。 接下来,你需要使用ZXing.Net来解析二维码。你可以使用以下代码: ```csharp using ZXing; // Decode QR code var reader = new BarcodeReader(); var result = reader.Decode(new Bitmap(qrCodeImage)); // Display result on page if (result != null) { Response.Write("QR code text: " + result.Text); } else { Response.Write("Failed to decode QR code."); } ``` 在这个例子,我们使用ZXing.Net来解析一个二维码图像,并在页面上显示结果。 最后,你需要将这些代码整合到一个页面,并使用ASP.NET的事件模型来处理二维码扫描的结果。 希望这些指导可以帮助你完成这个项目!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小耕家的喵大仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值