整理 | 小耕家的喵大仙
出品 | CSDN(ID:lichao19897314)
Q Q | 978124155
往期知识回顾:
👆 以上文章是以往对使用自动化技术操作微信的一些文章及案例!!!!
写这篇文章的目的是一个朋友留言我说他是做工厂自动化设备的,领导在设备出现故障或者想查看设备运行情况的时候想微信自动收到消息或者发送某个指令到联系人能获取到设备的运行状态。
😀所以这里就需要涉及到监控微信的实时消息并主动做出回复!!!!
😀领导为什么有APP不用要用微信呢?可能是习惯问题吧。。。
本篇文章介绍如何实现微信自动接收实时聊天信息,并对实时聊天信息做出对应的回复,我这里是没有接入任何业务的一个固定的回复语句。仅供测试之用,
小伙伴当然可以自行接入人工智能或者结合自己的业务来做出相关联的自动回复语句。
👇下面视频是软件实际效果!!!
自动接收消息并回复
实现的逻辑是实时监控微信的聊天面板中UI对象来判断是否有最新的消息过来,如果没有则继续监听,如果有则点击UI对象切换到当前聊天面板,并找到聊天面板中的输入框和发送按钮元素来进行回复。
(1)监控聊天面板中的UI
下图红色区域是微信的聊天面板是我们需要实时监控的UI对象,第一次采集完面板中的数据后,每隔1-2秒进行监听重复获取面板中的数据。最新数据和上一次数据做比对,如果数据一致则继续监听,数据不一致则代表有新消息出现。
在有新消息过来后,我们需要执行聊天对象的UI控件点击事件,将微信当前操作界面置为聊天窗口中。接下来将自动回复的话语输入到聊天文本框中,执行发送按钮的点击进行消息回复完成自动发送。
接下来是核心的源码👇
public override void Start()
{
if (State == TaskState.Stop)
{
State = TaskState.Runing;
}
else
{
return;
}
Thread th = new Thread(new ThreadStart(() =>
{
while (State == TaskState.Runing)
{
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<WXRealMsgEntity>();
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")?.Name;
var lastMessage = item.FindFirstByXPath("/Pane/Pane/Pane[2]/Text")?.Name;
var count = item.FindFirstByXPath("/Pane/Text")?.Name;
var messageitem = new WXRealMsgEntity { UserName = buttonName, Time = time, CurrentMessage = lastMessage, Count = count };
tempMessageSource.Add(messageitem);
if (historyMessageSource != null)
{
//与历史消息比较
//var cnt = historyMessageSource.Count(s => s.UserName == messageitem.UserName
//&& messageitem.Time == s.Time
//&& messageitem.CurrentMessage == s.CurrentMessage
//&& messageitem.Count == s.Count);
var cnt = historyMessageSource.Count(s => s.UserName == messageitem.UserName && messageitem.CurrentMessage == s.CurrentMessage);
if (cnt == 0)
{
//有新消息
SetMessage(messageitem.UserName + "发送给新消息你:" + messageitem.CurrentMessage);
if (ReplyUser.Count(ss => ss.Contains(messageitem.UserName))>0)
{
//自动回复
UI_WX_Window.Current.ClickElement(item);
Thread.Sleep(200);
SendWXMsg(messageitem.UserName,ReplyMessage);
//需要将历史消息本条重置
SetMessage( "自动回复消息给"+messageitem.UserName+":" + ReplyMessage);
messageitem.CurrentMessage = ReplyMessage;
}
}
}
}
});
historyMessageSource = tempMessageSource;
Thread.Sleep(1000);
}
}));
th.Start();
base.Start();
}
(2)发送消息
public void SendWXMsg(string name, string message)
{
var SendInput = GetSendInput();
if (SendInput != null)
{
SetText(new WXMessageEntity { Info = message, Type = WXMessageType.Text }, SendInput, false);
var SendButton = GetSendButton();
if (SendButton != null)
{
UI_WX_Window.Current.ClickElement(SendButton);
SystemLog.Info("向联系人【" + name + "】发送消息成功");
}
}
else
{
SystemLog.Error("【" + name + "】不是有效联系人");
}
}
如果读者对上述文章存在不清晰的地方可以找本人获取运行源码来学习,QQ 978124155