(13)自动回复微信聊天消息-微信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自动化

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

写这篇文章的目的是一个朋友留言我说他是做工厂自动化设备的,领导在设备出现故障或者想查看设备运行情况的时候想微信自动收到消息或者发送某个指令到联系人能获取到设备的运行状态。

😀所以这里就需要涉及到监控微信的实时消息并主动做出回复!!!!

😀领导为什么有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 + "】不是有效联系人");
            }
        }

上一篇 (12)PC端微信自动化测试-C#采集微信聊天记录

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小耕家的喵大仙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值