C# PC版微信消息监听自动回复的实现方法

最近有个微商客户需要搞个 个人微信监听群消息关键字并实现自动回复功能, 因为他有很多群 很多买家咨询的话 一个个回复太麻烦, 客户要求 比如群里有人发 关键字 产品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)
       {<br>        LogHelper.WriteLog("解析微信登录用户信息错误", e1);
       }
       return;<br>
      //文字,图片,视频,文件 解析
      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 则当前微信立马回复 前面设置的回复内容

到此这篇关于C# PC版微信消息监听自动回复的实现方法的文章就介绍到这了,更多相关C# 微信监听自动回复内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

原文地址:https://www.cnblogs.com/alonglonga/p/11876300.html

作者:小赫赫

(0)

相关推荐

  • php版微信开发之接收消息,自动判断及回复相应消息的方法

    本文实例讲述了php版微信开发之接收消息,自动判断及回复相应消息的方法.分享给大家供大家参考,具体如下: 微信的api现在己经强大到可以随意调用我们网站或指定数据库的内容进行自能回复现推送消息了,这里就来给大家介绍一个微信开发的笔记. 发送1,2,3,7测试相应的消息,菜单模式需要升级为服务号,或者订阅人数超过500以上. 1. 用户发送的消息都是通过你提交的开发者URL来接收,这里订阅号就可以搞定,发送过来的都是xml格式数据,需要解析,代码如下: $data = $GLOBALS["HTTP

  • 详解nodejs微信公众号开发——2.自动回复

    上一篇文章:nodejs微信公众号开发(1)接入微信公众号,本篇文章将在此基础上实现简单的回复功能. 1. 接入代码的优化 之前我们简单粗暴的实现了微信公众号的接入,接入的代码直接写在了app.js文件里面,从项目开发的角度而言,不便于日后代码的维护,所以将这部分代码独立出来,按照koa的风格,写成一个中间件. 在根目录下新建wechat文件夹,新建generator.js文件, var sha1 = require('sha1'); module.exports = function(opts

  • python实现微信自动回复功能

    本文实例为大家分享了python实现微信自动回复的具体代码,供大家参考,具体内容如下 新年到了,不想让一早上给你发送祝福的人心里一阵寒风,可以秒回复对方的话,试试下面的python程序可以帮你解决这个问题. 预装: python2.x或3.x pycharm pip install itchat pillow 桌面新建一个文件我们叫做newYear.py文件 打开它,用刚刚下载好的pyCharm软件 将下面的代码复制过去: # encoding = utf8 import itchat,time

  • python实现微信机器人: 登录微信、消息接收、自动回复功能

    安装wxpy pip install -U wxpy 登录微信 # 导入模块 from wxpy import * # 初始化机器人,扫码登陆 bot = Bot() 运行以上代码,会生成一个二维码,通过图片扫描二维码即可登录微信. 如果是在服务器上运行代码,无法显示图片的时候, 可以选择通过终端显示二维码图片, 只需要将代码改成: from wxpy import * bot = Bot(console_qr=True) 运行的效果如下: 当然,为了安全,这个二维码做了模糊处理 如果你认为每次

  • Python开发之快速搭建自动回复微信公众号功能

    在之前的一篇文章 Python利用 AIML 和 Tornado 搭建聊天机器人微信订阅号 中用 aiml 实现了一个简单的英文聊天机器人订阅号.但是只能处理英文消息,现在用 图灵机器人 来实现一个中文的聊天机器人订阅号. 这里主要介绍如何利用 Python 的 Tornado Web框架以及wechat-python-sdk微信公众平台 Python 开发包来快速搭建微信公众号. 完整的公众号代码 GitHub 地址:green ,由于目前此公众号有一些功能正在开发中,此完整代码会与下文所描述

  • 利用python微信库itchat实现微信自动回复功能

    前言 在论坛上看到了用Python登录微信并实现自动签到,才了解到一个新的Python库: itchat 利用Python 微信库itchat,可以实现自动回复等多种功能,好玩到根本停不下来啊,尤其是调戏调戏不懂计算机的,特别有成就感,哈哈!! 代码如下: #coding=utf8 import requests import itchat KEY = '8edce3ce905a4c1dbb965e6b35c3834d' def get_response(msg): apiUrl = 'http

  • 详解nodejs微信公众号开发——4.自动回复各种消息

    上一篇文章:nodejs微信公众号开发--3.封装消息响应模块,实现了对消息接口的模块化处理,方便后期的使用,本篇文章将介绍微信公众号回复各种消息的功能实现,包括文本.图片.语音.视频.音乐.图文等. 注:感觉最近localtunnel很不稳定,测试起来比较麻烦,有条件的自己搞个云服务器吧,我比较偷懒,几继续使用localtunnel了. 1. 被动回复用户消息 当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML

  • 微信公众号开发之文本消息自动回复php代码

    本文实例为大家分享了php微信文本消息自动回复 别代码,供大家参考,具体内容如下 1.PHP示例代码下载  下载地址1:http://xiazai.jb51.net/201608/yuanma/phpwx(jb51.net).rar  下载地址2:https://mp.weixin.qq.com/wiki/home/index.html(开始开发->接入指南->PHP示例代码下载) 2.wx_sample.php初始代码 <?php /** * wechat php test */ //

  • PHP微信开发之文本自动回复

    首先,先去微信公众平台注册一个账号(注册要填的东西挺多的),注册好之后,登录进去.可以看到左侧的"开发者中心",开启开发者中心前好像还要你完善一些资料,按照步骤完善即可.进入开发者中心之后,先去编辑 修改配置,修改配置的时候,注意: URL是你自己的域名下的PHP脚本(往下读有该脚本的demo),该脚本用于和微信接口对接.比如http://www.example.com/weixin.php Token是上述脚本里的定义的一个常量,比如你的PHP脚本里定义了: define("

  • 10分钟教你用Python实现微信自动回复功能

     01 前言&&效果展示 相信大家都有忙碌的时候,不可能一直守在微信上及时回复消息.但微信又不能像QQ一样设置自动回复.无妨,今天,我们就来用Python实现微信的自动回复功能吧,并且把接收到的消息统一发送到文件助手里面,方便统一查看. 效果如下: 02 环境准备 Python版本:3.6.0 系统平台:Windows 10 X64 IDE:pycharm 相关模块: time模块: itchat模块: 以及一些Python自带的模块. 03 实现原理 其实原理很简单,主要是利用itcha

随机推荐