最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# PC版微信消息監(jiān)聽自動回復的實現方法

 更新時間:2020年05月25日 11:44:46   作者:小赫赫  
這篇文章主要介紹了C# PC版微信消息監(jiān)聽自動回復的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

最近有個微商客戶需要搞個 個人微信監(jiān)聽群消息關鍵字并實現自動回復功能, 因為他有很多群 很多買家咨詢的話 一個個回復太麻煩, 客戶要求 比如群里有人發(fā) 關鍵字 產品1 則自動回復產品1的相關描述

首先設置關鍵字,將關鍵字和回復內容存到一個txt就行

然后就是微信消息監(jiān)聽(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); //發(fā)文字帶空格報錯
     }
 
     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 = "";  //發(fā)送內容
 
             //取消息內容
             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 + "】發(fā)送了關鍵詞消息:"+ 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 時,監(jiān)聽的是微信登錄的操作, 這時給前臺窗體一個提示, 提示登錄成功 如下圖

上監(jiān)聽的關鍵代碼 :

登錄時message 消息體的值 ||分割 第一個就是微信昵稱, wxid_ 開頭的就是微信唯一標識 , 最后是登錄用戶的頭像

然后用 另一個號往群里發(fā)消息 (當前登錄用戶和那個號必須在一個群 )

發(fā)送 : 產品1 這時觀察message 的值

@chatroom 結尾的是 群的唯一標識id 群聊就是群名稱, 發(fā)送人昵稱也有 發(fā)送的消息內容也有, 拿正則取一下就完事。

word就是提取的發(fā)送內容, 然后判斷如果發(fā)送的內容包含關鍵字 則調用SendMessage方法

/// <summary>
  /// 發(fā)送消息
  /// </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內存區(qū)域的字節(jié)數
   cds.lpData = message; //發(fā)送給目標窗口所在進程的數據
   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個效果圖

這是用客戶微信號 在群里 發(fā) 產品1 則當前微信立馬回復 前面設置的回復內容

到此這篇關于C# PC版微信消息監(jiān)聽自動回復的實現方法的文章就介紹到這了,更多相關C# 微信監(jiān)聽自動回復內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

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

作者:小赫赫

相關文章

  • C#中高效的多線程并行處理實現方式詳解

    C#中高效的多線程并行處理實現方式詳解

    在處理大型數據集時,單線程處理往往成為性能瓶頸,所以本文將詳細介紹幾種高效的多線程并行處理實現方式,幫助開發(fā)者優(yōu)化數據處理流程,有需要的可以了解下
    2025-04-04
  • C#去除字符串中的反斜杠實例(推薦)

    C#去除字符串中的反斜杠實例(推薦)

    下面小編就為大家分享一篇C#去除字符串中的反斜杠實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • C#計算字符串相似性的方法

    C#計算字符串相似性的方法

    這篇文章主要介紹了C#計算字符串相似性的方法,實例分析了C#計算字符串相似性的原理與算法實現技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • C#中const 和 readonly 修飾符的用法詳解

    C#中const 和 readonly 修飾符的用法詳解

    這篇文章主要介紹了C#中const 和 readonly 修飾符的用法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • .NET的深復制方法(以C#語言為例)

    .NET的深復制方法(以C#語言為例)

    深復制需要將對象實例中字段引用的對象也進行復制,在平時的編程工作中經常要用到這種復制方式,下面以c#為例來演示一下方法。
    2016-10-10
  • C#控制臺程序中使用官方依賴注入的實現

    C#控制臺程序中使用官方依賴注入的實現

    這篇文章主要介紹了C#控制臺程序中使用官方依賴注入的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • unity實現多點觸控代碼

    unity實現多點觸控代碼

    這篇文章主要介紹了unity實現多點觸控代碼,我最近在學習Unity游戲引擎。先從Unity平面開始,本章介紹Unity 平面上的多點觸摸。有需要的小伙伴參考下。
    2015-03-03
  • 基于C#實現屏幕取色器

    基于C#實現屏幕取色器

    這篇文章主要為大家詳細介紹了如何利用C#實現簡易的屏幕取色器,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以了解一下
    2022-12-12
  • C#實現winform版飛行棋

    C#實現winform版飛行棋

    這篇文章主要為大家詳細介紹了C#實現winform版飛行,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • c#的時間日期操作示例分享(c#獲取當前日期)

    c#的時間日期操作示例分享(c#獲取當前日期)

    這篇文章主要介紹了c#的時間日期操作示例,在給定時間戳返回指定的時間格式和獲取當前時間方法,需要的朋友可以參考下
    2014-03-03

最新評論

宁南县| 济南市| 安远县| 丘北县| 杭锦旗| 威信县| 台东县| 深圳市| 嵩明县| 阿拉善右旗| 乌兰浩特市| 耒阳市| 涿鹿县| 光泽县| 重庆市| 张家口市| 临桂县| 阜阳市| 天门市| 平武县| 油尖旺区| 建始县| 鄂托克前旗| 丹江口市| 东台市| 清徐县| 仁化县| 南汇区| 湖北省| 朝阳市| 伽师县| 信阳市| 翼城县| 堆龙德庆县| 江都市| 新化县| 西城区| 咸丰县| 南丹县| 鲁甸县| 团风县|