欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# PC版微信消息監(jiān)聽(tīng)自動(dòng)回復(fù)的實(shí)現(xiàn)方法

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

最近有個(gè)微商客戶(hù)需要搞個(gè) 個(gè)人微信監(jiān)聽(tīng)群消息關(guān)鍵字并實(shí)現(xiàn)自動(dòng)回復(fù)功能, 因?yàn)樗泻芏嗳?很多買(mǎi)家咨詢(xún)的話 一個(gè)個(gè)回復(fù)太麻煩, 客戶(hù)要求 比如群里有人發(fā) 關(guān)鍵字 產(chǎn)品1 則自動(dòng)回復(fù)產(chǎn)品1的相關(guān)描述

首先設(shè)置關(guān)鍵字,將關(guān)鍵字和回復(fù)內(nèi)容存到一個(gè)txt就行

然后就是微信消息監(jiān)聽(tīng)(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("解析微信消息報(bào)錯(cuò)", e); //發(fā)文字帶空格報(bào)錯(cuò)
     }
 
     switch (f)
     {
      //登錄時(shí)解析用戶(hù)信息
      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("解析微信登錄用戶(hù)信息錯(cuò)誤", 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("[消息內(nèi)容-->]"))
            {
             string word = "";  //發(fā)送內(nèi)容
 
             //取消息內(nèi)容
             string[] wordArr = Regex.Split(message, @"消息內(nèi)容-->]", 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ā)送了關(guān)鍵詞消息:"+ sarr[0]);
                richTextBox1.AppendTextColorful(key, Color.Red, false);
                richTextBox1.AppendText(key + "\r\n");
               }));
 
               //調(diào)用回復(fù)
               SendMessage(groupId + "||" + value, 20001);
              }
             }
            }
 
            break;
          }
         }
        }
       }
       catch (Exception e2)
       {
        this.Invoke(new MethodInvoker(() => { richTextBox1.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "10012 : 解析微信群信息錯(cuò)誤\r\n\r\n"); }));
       }
       break;
      default:
       break;
     }
     //消息內(nèi)容 cds.lpData
     break;
 
    default:
     base.DefWndProc(ref m);
     break;
   }
  }

WParam=10003 時(shí),監(jiān)聽(tīng)的是微信登錄的操作, 這時(shí)給前臺(tái)窗體一個(gè)提示, 提示登錄成功 如下圖

上監(jiān)聽(tīng)的關(guān)鍵代碼 :

登錄時(shí)message 消息體的值 ||分割 第一個(gè)就是微信昵稱(chēng), wxid_ 開(kāi)頭的就是微信唯一標(biāo)識(shí) , 最后是登錄用戶(hù)的頭像

然后用 另一個(gè)號(hào)往群里發(fā)消息 (當(dāng)前登錄用戶(hù)和那個(gè)號(hào)必須在一個(gè)群 )

發(fā)送 : 產(chǎn)品1 這時(shí)觀察message 的值

@chatroom 結(jié)尾的是 群的唯一標(biāo)識(shí)id 群聊就是群名稱(chēng), 發(fā)送人昵稱(chēng)也有 發(fā)送的消息內(nèi)容也有, 拿正則取一下就完事。

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

/// <summary>
  /// 發(fā)送消息
  /// </summary>
  /// <param name="message">消息內(nèi)容</param>
  /// <param name="wParam">通訊號(hào)</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內(nèi)存區(qū)域的字節(jié)數(shù)
   cds.lpData = message; //發(fā)送給目標(biāo)窗口所在進(jìn)程的數(shù)據(jù)
   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);
}

來(lái)2個(gè)效果圖

這是用客戶(hù)微信號(hào) 在群里 發(fā) 產(chǎn)品1 則當(dāng)前微信立馬回復(fù) 前面設(shè)置的回復(fù)內(nèi)容

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

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

作者:小赫赫

相關(guān)文章

  • c#各種Timer類(lèi)的區(qū)別與用法介紹

    c#各種Timer類(lèi)的區(qū)別與用法介紹

    System.Threading.Timer 是一個(gè)簡(jiǎn)單的輕量計(jì)時(shí)器,它使用回調(diào)方法并由線程池線程提供服務(wù)。在必須更新用戶(hù)界面的情況下,建議不要使用該計(jì)時(shí)器,因?yàn)樗幕卣{(diào)不在用戶(hù)界面線程上發(fā)生
    2013-10-10
  • c#?理解csredis庫(kù)實(shí)現(xiàn)分布式鎖的詳細(xì)流程

    c#?理解csredis庫(kù)實(shí)現(xiàn)分布式鎖的詳細(xì)流程

    這篇文章主要介紹了c#?理解csredis實(shí)現(xiàn)分布式鎖,該庫(kù)本身已經(jīng)足夠完善,這里我畫(huà)蛇添足一下,為了方便自己的使用,本文通過(guò)實(shí)例代碼給大家詳細(xì)介紹,需要的朋友可以參考下
    2022-02-02
  • C# 操作符之二 算數(shù)操作符

    C# 操作符之二 算數(shù)操作符

    算數(shù)操作符+,-,*,/,%,的用法和大多程序設(shè)計(jì)語(yǔ)言是相同的,%號(hào)的作用是整數(shù)除法中產(chǎn)生余數(shù),而整數(shù)法會(huì)直接去掉小數(shù)部分,而不是四舍五入。
    2011-02-02
  • C#編程實(shí)現(xiàn)Excel文檔中搜索文本內(nèi)容的方法及思路

    C#編程實(shí)現(xiàn)Excel文檔中搜索文本內(nèi)容的方法及思路

    有了在Word文檔中編程實(shí)現(xiàn)搜索文本的經(jīng)驗(yàn),在Excel中實(shí)現(xiàn)這個(gè)功能也并非難事。
    2013-07-07
  • C#中Span相關(guān)的性能優(yōu)化建議

    C#中Span相關(guān)的性能優(yōu)化建議

    Span 是C#7.2引入的一種新類(lèi)型,在.NET Core 2.1運(yùn)行時(shí)中受支持,Span 提供對(duì)內(nèi)存連續(xù)區(qū)域的類(lèi)型安全訪問(wèn),這篇文章主要給大家介紹了關(guān)于C#中Span相關(guān)的一些性能優(yōu)化建議,需要的朋友可以參考下
    2021-08-08
  • c#壓縮字符串的方法

    c#壓縮字符串的方法

    這篇文章主要介紹了c#壓縮字符串的方法,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 用C#獲取硬盤(pán)序列號(hào),CPU序列號(hào),網(wǎng)卡MAC地址的源碼

    用C#獲取硬盤(pán)序列號(hào),CPU序列號(hào),網(wǎng)卡MAC地址的源碼

    用C#獲取硬盤(pán)序列號(hào),CPU序列號(hào),網(wǎng)卡MAC地址的源碼...
    2007-03-03
  • 理解C#中的Lambda表達(dá)式

    理解C#中的Lambda表達(dá)式

    這篇文章主要介紹了理解C#中的Lambda表達(dá)式,本文用實(shí)例代碼來(lái)講解Lambda表達(dá)式,用不同的角度總結(jié)對(duì)它的認(rèn)識(shí),需要的朋友可以參考下
    2015-04-04
  • C# PDF Page操作設(shè)置頁(yè)面切換按鈕的方法

    C# PDF Page操作設(shè)置頁(yè)面切換按鈕的方法

    這篇文章主要介紹了C# PDF Page操作設(shè)置頁(yè)面切換按鈕的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05
  • Unity的IPreprocessBuildWithReport實(shí)用案例深入解析

    Unity的IPreprocessBuildWithReport實(shí)用案例深入解析

    這篇文章主要為大家介紹了Unity的IPreprocessBuildWithReport實(shí)用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05

最新評(píng)論