C#+FlaUI自动化+chatGPT实现微信AI问答Namenull

1、将文件传输助手置顶,模拟鼠标点击文件传输助手;

2、一直刷新会话列表,有新的消息就需要回复内容;

3、当刷新到新的消息时,模拟鼠标点击到对应的会话人,此时判断是群聊还是人,如果是群聊则不回复。

4、获取消息后转发给chatGPT,同时等待chatGPT回复内容。

6、模拟鼠标点击文件传输助手,等待其它消息。

三、功能代码

3.1、获取聊天消息并发送

voidGetChatInfo

{

if(!IsInit)

return;

}

if(wxWindow==null)

//wxWindow.FindAllDescendants(x=>x.ByControlType(FlaUI.Core.Definitions.ControlType.Button)).AsParallel.FirstOrDefault(s=>s!=null&&s.Name=="聊天").Click(false);

wxWindow.FindFirstDescendant(cf=>cf.ByName("聊天")).Click(false);

Task.Run(=>

AutomationElementassFirst=null;

objectobj=newobject;

while(true)

if(ChatListCancellationToken.IsCancellationRequested)

break;

try

DateTimedateTime3=DateTime.Now;

varsearchTextBox=wxWindow.FindFirstDescendant(cf=>cf.ByName("会话")).AsListBoxItem;

if(searchTextBox!=null)

varlist=searchTextBox.FindAllChildren;

if(assFirst==null)

assFirst=list.AsParallel.FirstOrDefault(t=>t!=null&&"文件传输助手".Equals(t.Name));//并行查询---需要将文件传输助手置顶

assFirst.Click;

continue;

Parallel.ForEach(list,item=>

if(item!=null&&!string.IsNullOrEmpty(item.Name)&&!"折叠置顶聊天".Equals(item.Name)

&&!"腾讯新闻".Equals(item.Name)&&!"群聊".Contains(item.Name))

DateTimet1=DateTime.Now;

varallText=item.FindAllByXPath(".//Text");//定位元素的局部搜索:.//Text;全局搜索://*/Text

DateTimet2=DateTime.Now;

Trace.WriteLine($"allText用时:{(t2-t1).TotalMilliseconds}ms");

//回复消息列表还未回复的

if(allText!=null&&allText.Length>=4)

if(int.TryParse(allText[3].Name,outvarcount)&&count>0)

lock(obj)

varname=allText[0].Name;

vartime=allText[1].Name;

varcontent=allText[2].Name;

if(wxWindow.Patterns.Window.PatternOrDefault!=null)

wxWindow.Patterns.Window.Pattern.SetWindowVisualState(FlaUI.Core.Definitions.WindowVisualState.Normal);

item.Click;

DateTimet7=DateTime.Now;

varitemFirst=wxWindow.FindAllDescendants(x=>x.ByControlType(FlaUI.Core.Definitions.ControlType.Text)).AsParallel

.FirstOrDefault(t=>t!=null&&t.Parent.ControlType==ControlType.Pane&&!t.IsOffscreen&&t.Name.Trim.IsSpecificNumbers);

DateTimet8=DateTime.Now;

Trace.WriteLine($"itemFirst:{(t8-t7).TotalMilliseconds}ms");

//判断是否为群聊

if(itemFirst==null)

AutoGetMesg(content);

});

DateTimedateTime4=DateTime.Now;

Trace.WriteLine($"任务888耗时:{(dateTime4-dateTime3).TotalMilliseconds}ms");

else

Thread.Sleep(10);

//ScrollEvent(-700);

catch(Exceptionex)

finally

//awaitTask.Delay(1);

},ChatListCancellationToken);

3.2、自动回复IChat_chat;

privatevoidAutoGetMesg(stringtxt)

if(_chat==null)

_chat=newChatAchieve;

_chat.RequestContent=GetMessage;

Trace.WriteLine($"发送消息:{txt}");

_chat.RequestGPT(txt);

privateFlaUI.Core.AutomationElements.TextBox_mesText;

publicFlaUI.Core.AutomationElements.TextBoxMesText

get

if(_mesText==null)

_mesText=wxWindow.FindFirstDescendant(x=>x.ByControlType(FlaUI.Core.Definitions.ControlType.Text)).AsTextBox;

return_mesText;

privateAutomationElement_btnSend;

publicAutomationElementbtnSend

if(_btnSend==null)

_btnSend=wxWindow.FindFirstDescendant(cf=>cf.ByName("sendBtn"));

//_btnSend=wxWindow.FindAllDescendants(x=>x.ByControlType(FlaUI.Core.Definitions.ControlType.Button)).FirstOrDefault(s=>s.Name=="发送(S)");

return_btnSend;

constint_offSize=300;

privatevoidGetMessage(stringmes)

SendMes(mes);

Trace.WriteLine($"回复:{mes}");

privatevoidSendMes(stringmes)

inttempLen=0;

stringtxt=string.Empty;

if(!string.IsNullOrWhiteSpace(mes))

string[]lines=mes.Split(Environment.NewLine);

foreach(stringlineinlines)

tempLen+=line.Length;

txt+=line+Environment.NewLine;

if(tempLen>_offSize)

MesText.Text=txt;

btnSend.Click;

tempLen=0;

txt=string.Empty;

if(!string.IsNullOrWhiteSpace(txt))

Thread.Sleep(3);

Trace.WriteLine(ex.Message);

3.3、其它代码///

///启动

///

///

///

privatevoidbtnStart_Click(objectsender,EventArgse)

InitWechat;

privatevoidFrmMain_Load(objectsender,EventArgse)

privatevoidFrmMain_FormClosing(objectsender,FormClosingEventArgse)

this.Dispose;

GC.Collect;

privateCancellationTokenFriendCancellationToken{get;set;}

privateCancellationTokenSourceFriendTokenSource{get;set;}

privateCancellationTokenChatListCancellationToken{get;set;}

privateCancellationTokenSourceChatListTokenSource{get;set;}

privateCancellationTokenGetFriendCancellationToken{get;set;}

privateCancellationTokenSourceGetFriendTokenSource{get;set;}

///

privateintProcessId{get;set;}

privateWindowwxWindow{get;set;}

privateboolIsInit{get;set;}

///获取

voidGetWxHandle

varprocess=Process.GetProcessesByName("Wechat").FirstOrDefault;

if(process!=null)

ProcessId=process.Id;

voidInitWechat

IsInit=true;

GetWxHandle;

GetFriendTokenSource=newCancellationTokenSource;

GetFriendCancellationToken=GetFriendTokenSource.Token;

ChatListTokenSource=newCancellationTokenSource;

ChatListCancellationToken=ChatListTokenSource.Token;

FriendTokenSource=newCancellationTokenSource;

FriendCancellationToken=FriendTokenSource.Token;

varapplication=FlaUI.Core.Application.Attach(ProcessId);

varautomation=newUIA3Automation;

wxWindow=application.GetMainWindow(automation);

if(MessageBox.Show(ex.Message,"异常",MessageBoxButtons.OK,MessageBoxIcon.Error)==DialogResult.OK)

this.Close;

//加载好友

IsListenCronyList=true;

//加载聊天信息

GetChatInfo;

///获取好友列表

voidGetFriends

wxWindow.FindAllDescendants(x=>x.ByControlType(FlaUI.Core.Definitions.ControlType.Button)).AsParallel

.FirstOrDefault(item=>item!=null&&item.Name=="通讯录").Click(false);

stringlastName=string.Empty;

varlist=newList;

varsync=SynchronizationContext.Current;

Task.Run(async=>

if(GetFriendCancellationToken.IsCancellationRequested)

varall=wxWindow.FindAllDescendants(x=>x.ByControlType(FlaUI.Core.Definitions.ControlType.ListItem));

varallItem=all.AsParallel.Where(s=>s!=null&&s.Parent!=null&&"联系人".Equals(s.Parent.Name)).ToList;

foreach(variteminallItem)

if(!string.IsNullOrWhiteSpace(item.Name)&&!listBox1.Items.Contains(item.Name.ToString))

sync.Post(s=>

listBox1.Items.Add(s);

},item.Name.ToString);

awaitTask.Delay(1);

},GetFriendCancellationToken);

///监听好友列表

privatevoidbtnListenCronyList_Click(objectsender,EventArgse)

IsListenCronyList=!IsListenCronyList;

privatebool_isListenCronyList=false;

publicboolIsListenCronyList

set

if(_isListenCronyList==value)

_isListenCronyList=value;

if(value)

txt="关闭监听好友列表";

GetFriends;

txt="开启监听好友列表";

GetFriendTokenSource.Cancel;

btnListenCronyList.ExecBeginInvoke(=>

btnListenCronyList.Text=txt;

get=>this._isListenCronyList;

3.4、扩展方法internalstaticclassSystemEx

///跨线程操作控件

///

///

publicstaticvoidExecBeginInvoke(thisControlcon,Actionaction)

if(action==null)return;

if(con.InvokeRequired)

con.BeginInvoke(newAction(action));

action;

publicstaticvoidExecInvoke(thisControlcon,Actionaction)

THE END
1.数据结构C++朋友圈朋友圈是由若干个人组成的集体,已知现在有n个人(1到n),然后给你m个关系xy,表示x和y是朋友,假设朋友的朋友也是朋友,求这n个人中最大的朋友圈人数。 输入格式:第一行为正整数n,m。接下来有m行,每行有两个正整数x和y,表示x和y是朋友。输出格式:输出n个人中最大的朋友圈人数。 https://blog.csdn.net/2301_77485708/article/details/143897643
2.微信如何批量添加删除好友?原来方法这么简单,看完涨知识了通讯2、创建标签之后,标签里面是没有任何好友的,我们需要把要删除的微信好友添加进来,我们点击【添加】 3、我们在微信里面找到要删除的好友,选择完成之后,点击添加,这样就添加成功了。 4、添加好之后,我们再次返回到标签,就可以看到这些好友在标签里面了,此时所有操作就完成了! https://www.163.com/dy/article/JJ25J4L905529DLR.html
3.数组用C# 将同一类型的多个变量存储在数组数据结构中。 通过指定类型或指定要存储任何类型的对象来声明数组。https://msdn.microsoft.com/zh-cn/library/9b9dty7d.aspx
4.python实现获取微信好友列表python微信好友1、登录微信 首先让程序登录微信,并获取我的好友相关信息。运行登录代码会自动弹出一个二维码页面(如下图所示),用手机扫码同意后,进入微信 并获取微信好友的相关信息。 代码如下: #导入模块 from wxpy import * #初始化机器人,选择缓存模式(扫码)登录 https://blog.51cto.com/u_16099250/10755909
5.微信网页授权获取用户基本信息(asp.netC#)asp版实现微信登录授权并获取用户昵称、性别、头像、来自等信息 上传者:wpb1987时间:2021-09-03 asp 微信公众号获取openid与基本信息源码.zip 微信公众号获取openid与基本信息源码,获取微信公众号openid,并根据公众号openid获取微信用户名用户信息与头像等,简单易懂。 https://www.iteye.com/resource/qq_34375579-10507447
6.微信小游戏SDK参考文档:微信SDK安装 对接代码中引入命名空间:using WeChatWASM; 接入须知 1.微信小游戏SDK-Unity(C#)SDK下载:点击进入 2.微信小游戏支撑服务介绍:点击进入 3.微信小游戏接入配置指引:点击进入 4.微信小游戏服务端文档请查阅:点击进入 接口 必接接口:游戏必须要接入 https://help.737.com/archives/docs/detail/channel_combine/sdk/nebula_weixin_unity_sdk
7..netc#微信授权获取用户信息透明的鱼!//////接口获取openid和session_key//////前台通过调用login接口获取到的code///前台通过调用login接口获取到的anonymous_code///<returns></returns>publicstringLoginGetopenid(stringcode,stringanonymous_code)//未效验{//按照规则填写参数stringappid ="***";stringsecret ="***";//地址(这里对地址和参数https://www.cnblogs.com/yutang-wangweisong/p/14246437.html
8.C#WinForm窗体微信发送消息最近没事把去年开源大赛易语言实现微信登录获取好友发消息的程序找出来看一看 然后突然想用C# WinForm窗体https://bbs.125.la/thread-14045038-1-1.html
9.电子通讯工具(精选八篇)微信提供公众平台、朋友圈、消息推送等功能, 用户可以通过“摇一摇”、“搜索号码”、“附近的人”、扫二维码方式添加好友和关注公众平台, 同时微信将内容分享给好友以及将用户看到的精彩内容分享到微信朋友圈。 2.2 发展 截至2013年11月注册用户量已经突破6亿, 是亚洲地区最大用户群体的移动即时通讯软件。2014年8月https://www.360wenmi.com/f/cnkeyt4f8400.html
10.隐私政策使用场景:聊天发送位置、好友圈发帖添加地理位置 使用目的:获取用户地理位置信息 共享方式:SDK 自动采集 隐私政策:隐私政策 3、友盟 SDK(Android 端、iOS 端) 第三方公司名称:友盟同欣(北京)科技有限公司、北京锐讯灵通科技有限公司 收集的信息:设备识别信息(含设备标识符、IP 地址、设备序列号、Android ID、互联网https://jspp.com/help/privacy.html
11.GitHub一键获取微信小程序源码, 使用了C#加nodejs制作直接解压在D盘根目录下后就可以使用将小程序文件放到 wxapkg目录下这个目录下有一些demo 可以先进行实验然后打开 CrackMinApp.exe 按说明即可使用 CrackMinApp是C#方面的源代码, nodejs已经配置好安装好依赖文件无需改动 本工具界面效果 那么如何才能在手机里找到小程序https://github.com/wpf900/CrackMinApp
12.C#实现hook微信收发消息查询添加好友转自52pj,希望有大佬能够开发一个,通过hook方式用QK给微信好友发消息。 https://itrmb.lanzouv.com/ifh1A07tqyna 对应微信版本:3.7.5.23 using Binarysharp.MemoryManagement; using Binarysharp.MemoryManagement.Assembly.CallingConvention; using System; https://getquicker.net/QA/Question/19066
13.C#实现hook微信收发消息查询添加好友吾爱破解本帖最后由 renxiaofeixia 于 2022-8-6 10:20 编辑 C#实现hook微信收发消息、查询、添加好友 https:https://www.52pojie.cn/thread-1671839-1-1.html
14.钓鱼嘲下微信聊天记录回传基于C#实现的获取微信数据库密钥的小工具,可配合chatViewTool使用。可直接执行命令.\dumpkey.exe,查看微信数据库密钥,并回传DBpass.bin文件中。 · 暂时不支持微信多开场景的密钥获取。 · 需微信登录后才可抓取密钥。 · 程序未采用动态获取基址的方式,因此为保证程序可用性,运行时会在线拉取基址。 http://www.360doc.com/content/23/0808/06/1091610972_1091610972.shtml
15.微信小程序服务端获取用户解密信息的方法小程序开发这篇文章主要介绍了 c#微信小程序服务端获取用户解密信息实例代码的相关资料,需要的朋友可以参考下 C#微信小程序服务端获取用户解密信息实例代码 实现代码: using AIOWeb.Models; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Data; using System.https://m.php.cn/faq/405150.html
16.可能是全网最完整的C#版微信SDK对接和开发过微信相关API(如:微信公众号开发、微信小程序、微信支付)的同学都知道,微信提供了非常多的接口供开发者使用和对接。其实对接接口谁都知道没啥难度,但是看文档费劲且费时间。因此找到一款封装完善且全面的SDK这能够大大的简化我们的开发难度和提高工作效率,今天给大家推荐一款由C#开源的完整且全面的微信SDK:https://developer.aliyun.com/article/1332799
17.新疆人才网xjhr.com最新升级内容系统会自动为企业会员生成一个基于手机端的HTML5招聘页。可以查阅企业基本信息和招聘职位,可分享到微信朋友圈或者发送给微信好友。分享同时企业LOGO自动获取被分享。 三、个人创建简历 个人会员注册后只需一步(姓名学历意向职位等10个表单)即刻创建简历。申请职位的时候如果是游客会员注册和创建简历一步完成。 https://www.kashirc.com/News/7819.html
18.C#微信公众平台开发之accesstoken获取存储与更新的示例分析以上是“C#微信公众平台开发之access_token获取存储与更新的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道! 本文题目:C#微信公众平台开发之access_token获取存储与更新的示例分析-创新互联 http://shouzuofang.com/article/dgsdhh.html
19.使用C#开发微信公众号中如何实现网页授权获取用户信息这篇文章主要介绍了使用C#开发微信公众号中如何实现网页授权获取用户信息,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 前言 微信网页授权共分为两种方式:snsapi_base、snsapi_userinfo。 snsapi_base需要关注公众号,获取用户信息时不弹出用户授权界面https://www.yisu.com/jc/326117.html
20.微信封号多长时间后会被注销?4条回答:【推荐答案】根本不会自动注销的,没有这个功能,可以邀请你的微信好友帮你解封,只要你的朋友微信,注册半年以上,而且绑定银行卡了,都可以帮你解封。你想让谁给你解封,就在微信上面填写谁的手机号,然后通知他们(短信或者电话),让他们打开微信,进入通讯录https://wap.zol.com.cn/ask/x_15485421.html
21.微信小程序使用GoEasy实现websocket实时通讯不需要下载安装,便可以在微信好友、微信群之间快速的转发,用户只需要扫码或者在微信里点击,就可以立即运行,有着近似APP的用户体验,使得微信小程序成为全民热爱的好东西~ 同时因为微信小程序使用的是Javascript语法,对前端开发人员而言,几乎是没有学习成本和技术门槛的。对于大部分场景,都可以使用小程序快速开发实现,不论https://www.jianshu.com/p/491709275a99