整理 | 小耕家的喵大仙
出品 | CSDN(ID:lichao19897314)
Q Q | 978124155
往期知识回顾:
👆 以上文章是以往对使用自动化技术操作微信的一些文章及案例!!!!
应用场景浅析:
一位做工程建筑类的朋友通过博客咨询我,他说他平时工作微信消息中文档特别多,每天他需要花费很多时间进行收集和整理。所以他咨询我是否能自动判断聊天消息是否为文件,如果是文件的话就将文件名称,大小,文档所在路径提取出来,并按照一定的业务进行整理归档。
实现效果呈现:
本视频内容针对监听通讯录中的某一位或者多为联系人,自动分析消息是否是文件并在文件完成下载后显示下载已完成。
监听文件并下载归档
使用某个微信向本人微信发送一个名称为log.txt的文本文档。
软件开启监听文件的功能,并显示有新文件到达,将文件名称,大小,存储路径,是否完成下载归档等信息输出。
将文档路径复制到资源管理器中做验证,发现log.txt存在本地。
经过验证,能满足建筑师朋友的需求。
技术实现:
- 通过实时监听聊天面板,通过消息主题,时间等关键信息比对,发现如果有信息到达,则进行下一步逻辑处理。
- 有新消息达到,则自动点击新消息的联系人UI对象,切换到与联系人的聊天窗口。
- 获取聊天窗口的最后一条消息对象,如果发现Name中包含[文件]关键字则进行下一步逻辑。
- 消息对象中包括了文件名称,大小,发送人等信息,将他们提取出来。
- 开启一个任务监听微信的文件夹,分析是否完成了下载归档操作。
代码片段:
微信是否产生新消息
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#版本)https://blog.csdn.net/lichao19897314/article/details/135425631下一篇 (18)C#采集微信群群成员列表信息-微信UI自动化(.Net)https://blog.csdn.net/lichao19897314/article/details/136784971