(23)采集微信实时消息(基于主窗体)-微信UI自动化(.Net+C#)

整理 | 小耕家的喵大仙

出品 | CSDN(ID:lichao19897314)

Q Q | 978124155

 往期知识回顾

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

(2)初始化微信窗体UI自动化实例-微信UI自动化(.Net+C#)

(3)采用热键终止微信采集任务-微信UI自动化(.Net+C#)

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

(5)实现对微信窗体元素静默操作-微信UI自动化(.Net+C#)

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

(7)定时群发微信图文消息-微信UI自动化(.Net+C#)

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

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

(10)实现微信窗体自动跟随移动-微信UI自动化(.Net+C#)

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

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

(13)自动回复微信聊天消息-微信UI自动化(.Net+C#)

(14)微信窗体元素截图操作-微信UI自动化(.Net+C#)

(15)针对微信主窗体的行为控制-微信UI自动化(.Net+C#)

(16)微信多开-微信UI自动化(.Net+C#)

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

(18)采集微信群成员信息-微信UI自动化(.Net+C#)

(19)批量添加微信好友-微信UI自动化(.Net+C#)

(20)批量将微信群成员添加为好友-微信UI自动化(.Net+C#)

(21)批量删除微信联系人-微信UI自动化(.Net+C#)

(22)采集微信通讯录详情面板-微信UI自动化(.Net+C#)

👆😀以上文章是以往使用自动化方案操作微信的一些案例!如有兴趣请点击浏览!

因为文章可能无法满足读者要求,如需源码和支持请联系本人 QQ 978124155 

本种采集方式的优缺点

      有同学私聊我希望通过一种【静默无感知】的情况下获取到微信的实时消息,所以在该种需求下我们只能通过监控微信主窗体的【聊天】列表来获取可视区域范围内的尽可能多的实时消息。

      首先这里需要强调一下,使用该种方式获取实时消息会有一些限制,如果对消息完整性不强的同学可以使用本种方式,比较快捷和容易实现,为什么会这样说呢,该方式的缺陷如下

  1. 如果某个用户批量发送多条消息,那么【聊天】列表中只会显示最后一条消息,会导致中间的消息丢失。
  2. 如果同时给你发送消息的好友或者群特别多,本来历史消息积压比较严重,可能导致实时消息超出可视区域,那么就会丢失不在可视区域范围内的消息。
  3. 如果当前微信主窗体被用户切换到其他位置,导致【聊天】列表不在可视区域中,那么就会导致无法接受实时消息。

      上面介绍了本种方式的缺点,但是优点也很明显,就是实现上简单,且无需和微信窗体主动交互大大增强了软件与用户的交互性,在面对一些消息量不大的个人微信场景个人觉得是足够了。

软件视频和部分截图

各位朋友如果时间允许可观看视频直观感受下软件的执行过程,会更加直观清晰,本人将自动化速度调节的慢些,以便更加清晰的感受到自动化带来的魅力。

通过监控微信主窗体【聊天】列表框控件我们软件中得到的实时消息。通过两张图片中的数据对比发现实时消息是准确的在满足特定条件的情况下。

实现思路
  1. 判断微信主窗体【聊天】功能区域是否在可视区域中。如果在则继续下面逻辑,不在则循环监听。
  2. 遍历【聊天】列表中的所有listitem项的内容,内容包含消息发送人名称,消息内容,时间。
  3. 如果是公众号这类通知则忽略。
  4. 如果发现本消息发送人不存在缓存中,则将本记录添加到缓存,继续读取列表下一条记录。
  5. 如果发现本消息发送人存在缓存中,则判断与缓存中消息内容是否一致,如果一致则代表是旧消息,如果不一致则代表是新消息。
  6. 将新消息通过事件的方式通知软件显示或者做其他业务处理。
技术细节

判断【聊天】列表是否在可视区域中

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;
}

定义一个存储消息的DTO对象

    /// <summary>
    /// 微信实时消息对象
    /// </summary>
    public class WXRealMsgEntity
    {
        /// <summary>
        /// 主控件名称
        /// </summary>
        public string ListItemName { get; set; }

        /// <summary>
        /// 发送消息的微信用户
        /// </summary>
        public string UserName { get; set; }

        /// <summary>
        /// 消息内容
        /// </summary>
        public string CurrentMessage { get; set; }
        /// <summary>
        /// 实时消息数量
        /// </summary>
        public string Count { get; set; }

        /// <summary>
        /// 接收最后一条消息的时间
        /// </summary>
        public string Time { get; set; }

        public override bool Equals(object obj)
        {
            return base.Equals(obj);
        }
    }

获取【列表】中的消息并判断是否是新消息需要提醒

	var messageList = currentChatList.FindAllChildren().ToList();
				var tempMessageSource = new List<WXRealMsgEntity>();
				foreach (var item in messageList)
				{
					if (item.ControlType != FlaUI.Core.Definitions.ControlType.ListItem)
					{
						continue;
					}
					var listName = item.Name;
					var buttonName = item.FindFirstByXPath("/Pane[1]/Button")?.Name + "";//发送消息人
				 

					var lastMessage = item.FindFirstByXPath("/Pane/Pane[2]/Text")?.Name + "";//消息内容
					 
					var time = item.FindFirstByXPath("/Pane/Pane/Pane[1]/Text[2]")?.Name + "";

					var count = item.FindFirstByXPath("/Pane/Text")?.Name + "";

					var messageitem = historyMessageSource.FirstOrDefault(s => s.UserName == buttonName);
					if (messageitem == null)
					{
						messageitem = new WXRealMsgEntity { ListItemName = listName, UserName = buttonName, Time = time, CurrentMessage = lastMessage, Count = count };
						historyMessageSource.Add(messageitem);
					}

					var cnt = historyMessageSource.Count(s => s.UserName == buttonName 
				&& s.CurrentMessage == lastMessage
				&& s.Time == time
				&& s.Count == count);

					if (cnt == 0)
					{
						//新消息通知
						InputTaskMessage(messageitem.UserName + "发送给新消息你:" + lastMessage);
						 messageitem.CurrentMessage = lastMessage;
						 messageitem.Time = time;
						 messageitem.Count = count;
					}
				}

因为文章可能无法满足读者要求,如需源码和支持请联系本人 QQ 978124155  

(22)采集微信通讯录好友明细信息-微信UI自动化(.Net+C#)icon-default.png?t=N7T8https://blog.csdn.net/lichao19897314/article/details/138498543

(24)实时采集微信消息(基于独立窗体)-微信UI自动化(.Net+C#)icon-default.png?t=N7T8https://blog.csdn.net/lichao19897314/article/details/138630885

  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
微信小程序是一种基于微信平台的应用程序,通过微信开发者工具进行开发。在微信小程序开发中,如果需要实现用户注册功能,可以使用.NET平台进行开发。 在.NET平台中,可以使用C#语言编写代码来实现微信小程序的注册功能。首先,需要引入微信小程序的开发接口,可以通过NuGet等方式引入相关的SDK。 注册功能要包括用户输入信息、后台处理和反馈等步骤。首先,可以在微信小程序前端页面添加一个注册表单,用户可以在该注册表单中填写相关信息,例如用户名、密码等。通过微信小程序提供的API,可以获取用户输入的信息。 接下来,在后台使用C#语言编写代码,可以通过编写API接口来处理用户注册的请求。在API接口中,可以使用数据库操作进行数据的存储和管理。例如,可以将用户注册的信息存储到关系型数据库中,例如SQL Server,或者非关系型数据库中,例如MongoDB。 在注册功能的代码中,还需要进行一些验证和安全处理措施。例如,需要对用户输入的用户名进行唯一性验证,以防止重复注册。同时,可以对用户密码进行加密处理,增加安全性。 最后,可以在注册成功后给用户发送反馈信息,例如注册成功的提示或者跳转到其他页面等。 需要注意的是,以上只是简单介绍了.NET平台在微信小程序注册功能开发中的一些关键步骤,具体的代码实现可能根据具体的需求和业务逻辑有所不同。在实际开发过程中,可以参考微信小程序的开发文档和.NET的相关文档,结合具体的业务需求进行开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小耕家的喵大仙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值