最近有个微商客户需要搞个 个人微信监听群消息关键字并实现自动回复功能, 因为他有很多群  很多买家咨询的话 一个个回复太麻烦, 客户要求 比如群里有人发 关键字 产品1  则自动回复产品1的相关描述

首先设置关键字,将关键字和回复内容存到一个txt就行

然后就是微信消息监听(windows的消息  句柄不懂的自己 google):

上监听的关键代码 :

 /// 消息主要接受程序
/// </summary>
/// <param name="m"></param>
protected override void DefWndProc(ref Message m)
{
switch (m.Msg)
{
case 74: //74代表WM_COPYDATA
string message = "";
int f = (int)m.WParam;
try
{
COPYDATASTRUCT2 cds2 = (COPYDATASTRUCT2)m.GetLParam(typeof(COPYDATASTRUCT2));
message = Marshal.PtrToStringAnsi(cds2.lpData);
}
catch (Exception e)
{
LogHelper.WriteLog("解析微信消息报错", e); //发文字带空格报错
} switch (f)
{
//登录时解析用户信息
case 10003:
try
{
if (!string.IsNullOrEmpty(message))
{
MessageHandler.Parse10003(message);
}
this.Invoke(new MethodInvoker(() => { richTextBox1.AppendText("【" + MessageHandler.myUserInfo.UserName + "】登录成功!\r\n"); }));
}
catch (Exception e1)
{
LogHelper.WriteLog("解析微信登录用户信息错误", e1);
}
return;
//文字,图片,视频,文件 解析
case 10012:
try
{
if (message.Contains("msgtyp:"))
{
string[] datas = Regex.Split(message, "msgtyp:", RegexOptions.IgnoreCase);
if (datas.Count() >= 2)
{
string msgtyp = datas[1].Split(',')[0];
switch (msgtyp.Replace(" ", ""))
{
case "1": //文字 if (message.Contains("[群-->]") && message.Contains("[消息内容-->]"))
{
string word = ""; //发送内容 //取消息内容
string[] wordArr = Regex.Split(message, @"消息内容-->]", RegexOptions.IgnoreCase); string[] aa = wordArr[1].Split(new string[] { "||" }, StringSplitOptions.RemoveEmptyEntries);
if (aa[0].StartsWith(" "))
{
word = aa[0].Substring(1);
}
else
{
word = aa[0];
} string groupId = WxMessageHelper.GetChatRoom(message);
string groupName = WxMessageHelper.GetGroupName(message);
string nickName = WxMessageHelper.GetNickName(message);
string memberpuid = WxMessageHelper.GetWxId(message); List<string> data = ReadFile();
foreach(var str in data)
{
string key = str.Split(';')[0];
string value = str.Split(';')[1]; if (word.Contains(key))
{
string[] sarr = Regex.Split(word, str, RegexOptions.IgnoreCase); this.Invoke(new MethodInvoker(() => { richTextBox1.AppendText("【" + nickName + "】在【" + groupName + "】发送了关键词消息:"+ sarr[0]);
richTextBox1.AppendTextColorful(key, Color.Red, false);
richTextBox1.AppendText(key + "\r\n");
})); //调用回复
SendMessage(groupId + "||" + value, 20001);
}
}
} break;
}
}
}
}
catch (Exception e2)
{
this.Invoke(new MethodInvoker(() => { richTextBox1.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "10012 : 解析微信群信息错误\r\n\r\n"); }));
}
break;
default:
break;
}
//消息内容 cds.lpData
break; default:
base.DefWndProc(ref m);
break;
}
}

  

WParam=10003 时,监听的是微信登录的操作, 这时给前台窗体一个提示, 提示登录成功 如下图

登录时message 消息体的值  ||分割  第一个就是微信昵称,  wxid_ 开头的就是微信唯一标识 , 最后是登录用户的头像

然后用 另一个号往群里发消息 (当前登录用户和那个号必须在一个群 )

发送  : 产品1  这时观察message 的值

@chatroom 结尾的是 群的唯一标识id   群聊就是群名称,   发送人昵称也有 发送的消息内容也有, 拿正则取一下就完事。

word就是提取的发送内容, 然后判断如果发送的内容包含关键字 则调用SendMessage方法 
 /// <summary>
/// 发送消息
/// </summary>
/// <param name="message">消息内容</param>
/// <param name="wParam">通讯号</param>
/// <returns></returns>
private int SendMessage(string message, int wParam)
{
byte[] sarr = System.Text.Encoding.Default.GetBytes(message);
int len = sarr.Length;
COPYDATASTRUCT cds;
cds.dwData = (IntPtr)Convert.ToInt16(1); //可以是任意值
cds.cbData = len + 1; //指定lpData内存区域的字节数
cds.lpData = message; //发送给目标窗口所在进程的数据
return myapi.SendMessage(common.微信句柄, 74, wParam, ref cds); //74代表WM_COPYDATA
}

  

[StructLayout(LayoutKind.Sequential, Size=1)]
public struct myapi
{
[DllImport("user32", EntryPoint="SetWindowLong")]
public static extern int SetWindowLongA(int hwnd, int nIndex, int dwNewLong);
[DllImport("User32.dll")]
public static extern int SendMessage(int hwnd, int msg, int wParam, ref COPYDATASTRUCT IParam);
[DllImport("User32.dll")]
public static extern int FindWindow(string lpClassName, string lpWindowName);
}

  

来2个效果图

这是用客户微信号  在群里 发 产品1   则当前微信立马回复  前面设置的回复内容

博客经个人辛苦努力所得,如有转载会特别申明,博客所有权归本人和博客园所有,如有转载请在显著位置给出博文链接和作者姓名,否则本人将付诸法律

原文地址: https://www.cnblogs.com/alonglonga/p/11876300.html    小赫赫首发

有问题联系Q: 591811930

如果觉得有帮助  您的打赏是我继续写的动力

                          

微信                                                                                  支付宝

C# PC版微信消息监听自动回复的更多相关文章

  1. 仿PC版微信的练手项目(可实时通讯)

    仿PC版微信的DEMO 本项目是由一个仿PC版微信的vue前端项目,和一个使用leancloud进行数据存储的.提供WebSocket的node后端项目构成. 本项目使用的技术栈:vue + vue- ...

  2. XMPP——Smack[2]会话、消息监听、字体表情和聊天窗口控制

    连接之后,拿到了connection,通过它可以搞定会话 建立一个会话 MessageListener msgListener = new MessageListener() { public voi ...

  3. Java ActiveMQ 讲解(二)Spring ActiveMQ整合+注解消息监听

    对于ActiveMQ消息的发送,原声的api操作繁琐,而且如果不进行二次封装,打开关闭会话以及各种创建操作也是够够的了.那么,Spring提供了一个很方便的去收发消息的框架,spring jms.整合 ...

  4. spring与activemq(三种消息监听方式)

    1.3     消息监听器MessageListener 在Spring整合JMS的应用中我们在定义消息监听器的时候一共可以定义三种类型的消息监听器,分别是MessageListener.Sessio ...

  5. 多线程消息监听容器配置[ 消费者spring-kafka配置文件]

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  6. 详细解读:远程线程注入DLL到PC版微信

    一.远程线程注入的原理 1.其基础是在 Windows 系统中,每个 .exe 文件在双击打开时都会加载 kernel32.dll 这个系统模块,该模块中有一个 LoadLibrary() 函数,可以 ...

  7. 简单消息监听容器--SimpleMessageListenerContainer

    这个类非常强大,我们可以对他做很多设置,对于消费者的配置项,这个类都可以满足监听队列(多个队列).自动启动.自动声明功能可以设置事务特性.事务管理器.事务属性.事务容量(并发).是否开启事务.回滚消息 ...

  8. 读取PC版微信数据库(电脑版微信数据库)内容

    原始网址   https://www.cnblogs.com/Charltsing/p/WeChatPCdb.html 1.PC版微信的密钥是32位byte,不同于安卓版(7位字符串) 2.通过OD或 ...

  9. 聊天框Demo:DotNetCore+ActiveMQ+Mqttjs 实现前后台消息监听

    网上查了查 ActiveMQ + .net core 的例子很少,自己做一个demo 作为记录,另外FineUI Core基础版要来了,出来后我会用FineUI再做一版,为知识星球的引流... 1.安 ...

随机推荐

  1. Easily use UUIDs in Laravel

    Easily use UUIDs in Laravel  Wilbur PoweryOct 29 '18 Updated on Oct 30, 2018 ・1 min read #php #larav ...

  2. dsu on tree(树上启发式合并)

    简介 对于一颗静态树,O(nlogn)时间内处理子树的统计问题.是一种优雅的暴力. 算法思想 很显然,朴素做法下,对于每颗子树对其进行统计的时间复杂度是平方级别的.考虑对树进行一个重链剖分.虽然都基于 ...

  3. 关于hbase的数据迁移

    场景: 一套自己编译的Hbase集群 A 一套自己通过cloudera平台搭建的Hbase集群 B 注意:( 我的两套集群是同一个网段的) 方式1:通过快照方式进行数据迁移(不需要提前建表) 1):首 ...

  4. DS博客作业07——查找

    1.本周学习总结 1.1思维导图 1.2.谈谈你对查找运算的认识及学习体会. 查找的内容和前两章树和图相比,要简单许多,在二次搜索树虽然也要用到树,但是也是很简单的树的操作,再加上查找的代码可以使用m ...

  5. centos-Hadoop集群 安装同步时间

    1.安装 yum search cache ntpdate xcall.sh "yum install -y ntpdate.x86_64" 2.同步 xcall.sh " ...

  6. Android:通过systrace进行性能分析

    一.Systrace 简介 Systrace 允许您在系统级别(如SurfaceFlinger.WindowManagerService等Framework部分关键模块.服务.View系统等)收集和检 ...

  7. WebLogic服务器

    WebLogic是美国Oracle公司出品的一个application server确切的说是一个基于JAVAEE架构的中间件,BEA WebLogic是用于开发.集成.部署和管理大型分布式Web应用 ...

  8. 传统Web应用请求和响应特点【显示当前时间】

    (1)请求:浏览器以HTTP协议的方式提交请求到服务器 (2)响应:服务器以HTTP协议的方式响应内容到浏览器 注意:HTTP是WEB大众化非安全协议 HTTPS是WEB安全协议,是基于HTTP协议的 ...

  9. C标准库中转换wchar_t和char类型的字符串

    C 库函数 - mbstowcs()  C 标准库 - <stdlib.h> 描述 C 库函数 size_t mbstowcs(schar_t *pwcs, const char *str ...

  10. python之NLP数据清洗

    1.知识点 """ 安装模块:bs4 nltk gensim nltk:处理英文 1.安装 2.nltk.download() 下载相应的模块 英文数据处理: 1.去掉h ...