C# PC版微信消息監(jiān)聽自動回復(fù)的實(shí)現(xiàn)方法
最近有個微商客戶需要搞個 個人微信監(jiān)聽群消息關(guān)鍵字并實(shí)現(xiàn)自動回復(fù)功能, 因?yàn)樗泻芏嗳?很多買家咨詢的話 一個個回復(fù)太麻煩, 客戶要求 比如群里有人發(fā) 關(guān)鍵字 產(chǎn)品1 則自動回復(fù)產(chǎn)品1的相關(guān)描述
首先設(shè)置關(guān)鍵字,將關(guān)鍵字和回復(fù)內(nèi)容存到一個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("[消息內(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 : 解析微信群信息錯誤\r\n\r\n"); }));
}
break;
default:
break;
}
//消息內(nèi)容 cds.lpData
break;
default:
base.DefWndProc(ref m);
break;
}
}
WParam=10003 時,監(jiān)聽的是微信登錄的操作, 這時給前臺窗體一個提示, 提示登錄成功 如下圖
上監(jiān)聽的關(guān)鍵代碼 :

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

然后用 另一個號往群里發(fā)消息 (當(dāng)前登錄用戶和那個號必須在一個群 )
發(fā)送 : 產(chǎn)品1 這時觀察message 的值

@chatroom 結(jié)尾的是 群的唯一標(biāo)識id 群聊就是群名稱, 發(fā)送人昵稱也有 發(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">通訊號</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);
}
來2個效果圖


這是用客戶微信號 在群里 發(fā) 產(chǎn)品1 則當(dāng)前微信立馬回復(fù) 前面設(shè)置的回復(fù)內(nèi)容
到此這篇關(guān)于C# PC版微信消息監(jiān)聽自動回復(fù)的實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)C# 微信監(jiān)聽自動回復(fù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
原文地址:https://www.cnblogs.com/alonglonga/p/11876300.html
作者:小赫赫
相關(guān)文章
c#?理解csredis庫實(shí)現(xiàn)分布式鎖的詳細(xì)流程
這篇文章主要介紹了c#?理解csredis實(shí)現(xiàn)分布式鎖,該庫本身已經(jīng)足夠完善,這里我畫蛇添足一下,為了方便自己的使用,本文通過實(shí)例代碼給大家詳細(xì)介紹,需要的朋友可以參考下2022-02-02
C#編程實(shí)現(xiàn)Excel文檔中搜索文本內(nèi)容的方法及思路
有了在Word文檔中編程實(shí)現(xiàn)搜索文本的經(jīng)驗(yàn),在Excel中實(shí)現(xiàn)這個功能也并非難事。2013-07-07
用C#獲取硬盤序列號,CPU序列號,網(wǎng)卡MAC地址的源碼
用C#獲取硬盤序列號,CPU序列號,網(wǎng)卡MAC地址的源碼...2007-03-03
Unity的IPreprocessBuildWithReport實(shí)用案例深入解析
這篇文章主要為大家介紹了Unity的IPreprocessBuildWithReport實(shí)用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05

