old_flsystem/PCRobot/WinForm.cs

2117 lines
95 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using CsharpHttpHelper;
using HPSocketCS;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using PCRobot.Pack;
using PCRobot.PCWechat;
using PCRobot.Utils;
using PCRobot.WechatApi;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Web.Caching;
using System.Windows.Forms;
using System.Xml;
using static PCRobot.PCWechat.Wechat_Xiaoxie;
using static PCRobot.WechatApi.NMHelper;
namespace PCRobot
{
public partial class WinForm : Form
{
public WinForm()
{
InitializeComponent();
}
private void WinForm_FormClosing(object sender, FormClosingEventArgs e)
{
var msg = MessageBox.Show("您确定要退出软件吗?\r\n退出后,已登陆的微信将会被强制关闭!", "谨慎操作", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (msg != DialogResult.Yes) e.Cancel = true;
else PCWechat.WechatClient.UnInstall();
}
private void PCForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (!e.Cancel && socketClient != null && socketClient.IsConnected)
{
socketClient.Close(true);
}
}
private void WinForm_SizeChanged(object sender, EventArgs e)
{
//判断是否选择的是最小化按钮
if (WindowState == FormWindowState.Minimized)
{
//托盘显示图标等于托盘图标对象
//注意notifyIcon1是控件的名字而不是对象的名字
this..Visible = true;
//隐藏任务栏区图标
this.ShowInTaskbar = false;
}
else this..Visible = false;
}
private void _MouseDoubleClick(object sender, MouseEventArgs e)
{
this.Visible = true;
this.WindowState = FormWindowState.Normal;
this.ShowInTaskbar = true;
}
public static SocketClient socketClient = null;
private void button2_Click(object sender, EventArgs e)
{
try
{
if (!socketClient.IsConnected)
{
this.tabControl1.SelectedIndex = 1;
MessageBox.Show("请先连接机器人服务器!", "友情提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
StartWechat();
//NmClient nmClient = new NmClient();
//nmClient.IniWechat(socketClient,lgCall);
//nmClient.StartWechat();
//nmCore = nmClient.nmCore;WxRecvCallback
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "启动失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
//if (ex.Message == "微信版本")
//{
// if (DialogResult.OK == MessageBox.Show($@"您的微信版本不兼容,以后请不要自己买升级微信!!!\r\n 点击确定按钮后,我们将为您还原指定的微信版本!", "微信版本异常", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning))
// {
// new WechatUpdate(comboBox1.SelectedItem.ToString()).ShowDialog();
// }
//}
}
}
#region
private static readonly object SequenceLock = new object();
static HPSocketCS.TcpPackServer HP_Server = new HPSocketCS.TcpPackServer();
NMHelper nmHeler = new NMHelper();
public NMCore nmCore { get; set; }
public string NewLine;
public bool isReady { get; set; } = false;
nmWxidInfo curWx;
public void IniWechat()
{
if (!isReady)
{
try
{
PCWechat.Wechat_Xiaoxie.Install();
NewLine = Environment.NewLine;
HP_Server.OnAccept += new ServerEvent.OnAcceptEventHandler(OnAccept);
HP_Server.OnReceive += new ServerEvent.OnReceiveEventHandler(OnReceive);
HP_Server.OnClose += new ServerEvent.OnCloseEventHandler(OnClose);
HP_Server.MaxPackSize = 0x3FFFFF;
HP_Server.IpAddress = "127.0.0.1";
HP_Server.Port = 0;
if (HP_Server.Start() == true)
{
isReady = true;
nmCore = new NMCore(HP_Server);
string szIPAddress = string.Empty;
ushort dwPort = 0;
HP_Server.GetListenAddress(ref szIPAddress, ref dwPort);
if (dwPort == 0)
{
//MessageBox.Show("通信端口创建失败,请重试!", "错误");
//Environment.Exit(0);
}
nmHeler.Socket_Port = dwPort;
WriteLog("[初始化]" + NewLine + "绑定地址:" + szIPAddress + NewLine + "通信端口:" + nmHeler.Socket_Port.ToString());
}
else
{
//MessageBox.Show("创建通信服务失败,请重试!", "错误");
//Environment.Exit(0);
}
//byte[] bytPath = new byte[260];
//if (NMHelper.NM_GetWeChatPath(bytPath, 260) == true)
//{
// string Path = System.Text.Encoding.GetEncoding("GB2312").GetString(bytPath, 0, bytPath.Length);
// text_WeChatPath.Text = Path;
//}
NMHelper.NM_LinkWeChat(201912121, nmHeler.Socket_Port, 0, 0);
}
catch (Exception)
{
}
}
}
HandleResult OnAccept(IServer sender, IntPtr connId, IntPtr pClient)
{
try
{
nmCore.NM_Init((int)connId, "C#-275569550");
}
catch (Exception ex)
{ }
return HandleResult.Ok;
}
HandleResult OnReceive(IServer sender, IntPtr connId, byte[] bytes)
{
try
{
string s_Recv = Encoding.Default.GetString(bytes);
JObject RecvJson = JObject.Parse(s_Recv);
int RecvType;
if (nmHeler.Json_GetInt(RecvJson, "PackType", out RecvType) == true)
{
if (RecvType == NMHelper.Recv_QRCode)//二维码
{
Event_QRCode(RecvJson);
}
else if (RecvType == NMHelper.Recv_Login)//登录
{
Event_Login((int)connId, RecvJson);
}
else if (RecvType == NMHelper.Recv_Logout)
{
Event_Logout((int)connId, RecvJson);
}
else if (RecvType == NMHelper.Recv_Msg)//消息
{
Event_RecvMsg((int)connId, RecvJson);
}
else if (RecvType == NMHelper.Recv_SelectTalker)//切换聊天对象
{
Event_SelectTalker((int)connId, RecvJson);
}
else if (RecvType == NMHelper.NM_GetContactList)//获取好友列表列表
{
Event_RecvContactList((int)connId, RecvJson);
}
else if (RecvType == NMHelper.NM_GetGroupMember)//获取群信息
{
Event_RecvGroupMember((int)connId, RecvJson);
}
else if (RecvType == NMHelper.NM_GetWxidInfo)//获取群或好友详细信息
{
Event_RecvWxidInfo((int)connId, RecvJson);
}
else if (RecvType == NMHelper.NM_AddFriend)
{
Event_AddFriend((int)connId, RecvJson);
}
else if (RecvType == NMHelper.NM_CreateGroup)
{
Event_CreateGroup((int)connId, RecvJson);
}
else if (RecvType == NMHelper.NM_GetFavList)
{
Event_GetFavList((int)connId, RecvJson);
}
else if (RecvType == NMHelper.NM_GetA8Key)
{
Event_GetA8Key((int)connId, RecvJson);
}
else if (RecvType == NMHelper.NM_InvitePull)
{
Event_GroupInvite((int)connId, RecvJson);
}
else if (RecvType == NMHelper.NM_QuitGroup)
{
Event_GroupQuit((int)connId, RecvJson);
}
}
}
catch (Exception ex)
{
}
return HandleResult.Ok;
}
HandleResult OnClose(IServer sender, IntPtr connId, SocketOperation enOperation, int errorCode)
{
try
{
Event_Logout((int)connId, new JObject());
}
catch (Exception)
{
}
return HandleResult.Ok;
}
/// <summary>
/// 通信事件_接收登录二维码
/// </summary>
/// <param name="RecvJson"></param>
void Event_QRCode(JObject RecvJson)
{
try
{
int dwPid = 0;
nmHeler.Json_GetInt(RecvJson, "ProcessId", out dwPid);
string B64_QRCode = nmHeler.Json_GetString(RecvJson, "QRCode", false);
if (B64_QRCode != string.Empty)
{
byte[] imageBytes = Convert.FromBase64String(B64_QRCode);
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
ms.Write(imageBytes, 0, imageBytes.Length);
//pictureBox1.Image = System.Drawing.Image.FromStream(ms, true);
WriteLog("[二维码]" + NewLine + "接收来自进程(PID" + dwPid.ToString() + ")的登录二维码");
}
}
catch (Exception)
{
}
}
/// <summary>
/// 通信事件_登录成功
/// </summary>
/// <param name="ConnID"></param>
/// <param name="RecvJson"></param>
void Event_Login(int ConnID, JObject RecvJson)
{
try
{
lock (SequenceLock)
{
DwPid = (IntPtr)nmHeler.Json_GetIntEx(RecvJson, "ProcessId");
NMHelper.nmWxidInfo WxidInfo = new NMHelper.nmWxidInfo();
WxidInfo.Nick = nmHeler.Json_GetString(RecvJson, "Nick", true);
WxidInfo.Wxid = nmHeler.Json_GetString(RecvJson, "Wxid", true);
WxidInfo.WxNo = nmHeler.Json_GetString(RecvJson, "WxNo", true);
WxidInfo.HeadIMG = nmHeler.Json_GetString(RecvJson, "HeadIMG", true);
WxidInfo.Sex = nmHeler.Json_GetIntEx(RecvJson, "Sex").ToString();
WxidInfo.Phone = nmHeler.Json_GetString(RecvJson, "Phone", true);
WxidInfo.handle = (int)DwPid;
WxidInfo.socketHandle = ConnID;
curWx = WxidInfo;
lgCall(curWx);
GetUsers(ConnID);
}
}
catch (Exception ex)
{
}
}
public void GetUsers(int ConnID)
{
nmCore.NM_GetContactList(ConnID);
}
Dictionary<int, List<nmWxidInfo>> nmWxidInfos = new Dictionary<int, List<nmWxidInfo>>();
/// <summary>
/// 通信事件_退出登录
/// </summary>
/// <param name="ConnID"></param>
/// <param name="RecvJson"></param>
void Event_Logout(int ConnID, JObject RecvJson, bool isAll = false)
{
try
{
var nm = nms.FirstOrDefault(p => p.socketHandle == ConnID);
if (nm.Wxid != null)
{
if (socketClient != null)
{
WechatStatus msg = new WechatStatus();
msg.Cmd = PCRobotCMD.offline;
msg.RobotUsername = nm.Wxid;
msg.RobotUsernick = nm.Nick;
msg.RobotType = RobotType.;
msg.Status = Status.退;
socketClient.Send(msg);
}
WriteLog("[微信退出]" + NewLine + "昵称:" + nm.Nick + NewLine + "Wxid" + nm.Wxid);
if (!isAll)
{
nms.Remove(nm);
UpdateUi();
}
}
//int dwRowIndex = nmHeler.FindRowIndex(list_Login, ConnID.ToString(), 0);
//if (dwRowIndex != -1)
//{
// if (ConnID == nmHeler.Socket_ConnId)
// {
// nmHeler.Socket_ConnId = 0;
// groupBox1.Text = "登录列表";
// }
// string szNick = list_Login.Items[dwRowIndex].SubItems[1].Text;
// string szWxid = list_Login.Items[dwRowIndex].SubItems[2].Text;
// list_Login.Items.RemoveAt(dwRowIndex);
// WriteLog("[微信退出]" + NewLine + "昵称:" + szNick + NewLine + "Wxid" + szWxid);
//}
}
catch (Exception ex)
{
}
}
private List<string> filtrationWX = new List<string>() { "weixin" };//gh_43f2581f6fd6
//private static string[] not_delete = new string[] { "fmessage", "floatbottle", "qmessage", "medianote", "qqmail", "weixin" };
/// <summary>
/// 客户端请求
/// </summary>
/// <param name="str"></param>
public void Rcv(string str)
{
try
{
var bodyIndex = str.IndexOf(" ");
if (bodyIndex == -1) return;
var head = str.Substring(0, bodyIndex);
var cmd = (PCRobotCMD)Enum.Parse(typeof(PCRobotCMD), head);
var msg = str.Substring(bodyIndex).Trim().Replace("\r\n", "\n").Replace("[换行]", "\n");
var text = PackTool.DecompressString(msg);
//str = CsharpHttpHelper.HttpHelper.URLDecode(msg).Replace("\0", "").Trim().Replace("\r\n", "\n");
//if (!str.StartsWith("{"))
//{
// AESCryption aes = new AESCryption();
// str = aes.AesDecrypt(msg, socketClient.key);
//}
//var msgT = JObject.Parse(str);
//var msg = JsonConvert.DeserializeObject<WechatReceiveMsg>(str);
// var _data = HttpExtend.JsonToDictionary(str);
var data = Util.JsonToObject<ServerWechatMsg>(text) as ServerWechatMsg;
if (data == null || data.Key != socketClient.key) return;
var wechatUser = WechatClient.Users.FirstOrDefault(f => f.Key == data.RobotUsername.ToString()).Value;
if (wechatUser != null)
{
//if (cmd.ToString().ToLower().StartsWith("send"))
//{
// var mess = data.ToMessage;
// if (cmd == PCRobotCMD.sendTxt)
// mess = mess.Replace("\r\n", "\n");
// Common.SetCache(curWx.Wxid, data.ToUsername, mess);
//}
object obj = null;
switch (cmd)
{
case PCRobotCMD.sendTxt:
obj = new { type = MsgType.MT_SEND_TEXTMSG, data = new { to_wxid = data.ToUsername.ToString(), content = data.ToMessage } };
break;
case PCRobotCMD.sendFile:
case PCRobotCMD.sendImg:
obj = new { type = PCRobotCMD.sendImg == cmd ? MsgType.MT_SEND_IMGMSG : MsgType.MT_SEND_FILEMSG, data = new { to_wxid = data.ToUsername.ToString(), file = data.ToMessage } };
break;
case PCRobotCMD.agreeFriend:
{
//data.ToMessage //TODO 这还没有获取v1 v2 scene 的值
/*
"data" : {
"v1": "v1_xxxxxxxx@stranger", // v1
"v2": "v2_xxxxxxxx@stranger",
"scene": 17
},
"type" : MT_ACCEPT_FRIEND_MSG
*/
var v1 = string.Empty;
var v2 = string.Empty;
var scene = string.Empty;
obj = new { type = MsgType.MT_ACCEPT_FRIEND_MSG, data = new { v1 = v1, v2 = v2, scene = scene } };
}
break;
case PCRobotCMD.sendCard:
obj = new { type = MsgType.MT_SEND_CARDMSG, data = new { to_wxid = data.ToUsername, card_wxid = data.ToMessage } };
break;
case PCRobotCMD.getContact:
obj = new { type = MsgType.MT_DATA_FRIENDS_MSG, data = new { } };
Thread.Sleep(330);
obj = new { type = MsgType.MT_DATA_CHATROOMS_MSG, data = new { } };
break;
case PCRobotCMD.getGroupMember:
obj = new { type = MsgType.MT_DATA_CHATROOM_MEMBERS_MSG, data = new { room_wxid = data.ToMessage } };
break;
case PCRobotCMD.getPay:
{
//var Invalidtime = 0;
var Transferid = string.Empty;
var dic = HttpExtend.JsonToDictionary(data.ToMessage);
//if (dic.ContainsKey("Invalidtime"))
// Invalidtime = int.Parse(dic["Invalidtime"].ToString());
if (dic.ContainsKey("Transferid"))
Transferid = dic["Transferid"].ToString();
obj = new { type = MsgType.MT_ACCEPT_WCPAY_MSG, data = new { transferid = Transferid } };
}
break;
case PCRobotCMD.deleteFriend:
obj = new { type = MsgType.MT_DEL_FRIEND_MSG, data = new { wxid = data.ToMessage } };
break;
case PCRobotCMD.sendInviteGroup:
obj = new { type = MsgType.MT_SEND_CARDMSG, data = new { to_wxid = data.ToUsername, card_wxid = data.ToMessage } };
break;
case PCRobotCMD.editContacts:
obj = new { type = MsgType.MT_MOD_FRIEND_REMARK_MSG, data = new { wxid = data.ToUsername, remark = data.ToMessage } };
break;
case PCRobotCMD.stateOpt:
obj = new { type = MsgType.MT_MOD_CHAT_SESSION_TOP_MSG, data = new { wxid = data.ToUsername, status = int.Parse(data.ToMessage) } };
break;
case PCRobotCMD.getWxidInfo:
obj = new { type = MsgType.MT_UPDATE_WXID_MSG, data = new { wxid = data.ToMessage } };
break;
}
//if (obj != null)
// WechatClient.GetApi(wechatUser).SendMessage(wechatUser.Wxid.ToString(), obj);
}
else
{
var curWx = nms.FirstOrDefault(p => p.Wxid == data.RobotUsername.ToString());
if (string.IsNullOrEmpty(curWx.Wxid))
return;
if (cmd.ToString().ToLower().StartsWith("send"))
{
var mess = data.ToMessage;
if (cmd == PCRobotCMD.sendTxt)
mess = mess.Replace("\r\n", "\n");
Common.SetCache(curWx.Wxid, data.ToUsername, mess);
}
switch (cmd)
{
case PCRobotCMD.sendTxt:
var dataMsg = data.ToMessage.Replace("\r\n", "\n");
if (isXML(dataMsg))
{
nmCore.NM_SendURLMsg(curWx.socketHandle, data.ToUsername.ToString(), dataMsg.Replace("&", "&amp;"));
}
else
{
nmCore.NM_SendTextMsg(curWx.socketHandle, data.ToUsername.ToString(), new string[] { "" }, dataMsg);
}
break;
case PCRobotCMD.sendFile:
//文件接口
//WechatAPI.Wx_SendFileMsg(WechatAPI.Client_Handle, 3, msg.FromUsername, msg.FromMessage);
//Util.Base64ToFileAndSave(data.ToMessage,)
nmCore.NM_SendFileMsg(curWx.socketHandle, NMHelper.NM_SendFile, data.ToUsername.ToString(), data.ToMessage);
break;
case PCRobotCMD.sendImg:
//byte[] ImageByte = Convert.FromBase64String(msg.FromMessage);
//string temp = System.Environment.GetEnvironmentVariable("TEMP");
////DirectoryInfo info = new DirectoryInfo(temp);
//string uFile = temp + "//" + Guid.NewGuid().ToString() + ".png";
//File.WriteAllBytes(uFile, ImageByte);
////图片接口
//WechatAPI.Wx_SendFileMsg(WechatAPI.Client_Handle, 3, msg.FromUsername, uFile);
nmCore.NM_SendFileMsg(curWx.socketHandle, NMHelper.NM_SendPic, data.ToUsername, data.ToMessage);
break;
case PCRobotCMD.sendCard:
if (data.ToMessage.Contains("@"))
nmCore.NM_InviteToGroup(curWx.socketHandle, NMHelper.NM_InviteURL, data.ToMessage, new string[] { data.ToUsername });
else
nmCore.NM_SendCardMsg(curWx.socketHandle, data.ToUsername, data.ToMessage);
break;
case PCRobotCMD.sendInviteGroup:
nmCore.NM_InviteToGroup(curWx.socketHandle, NMHelper.NM_InviteURL, data.ToMessage, new string[] { data.ToUsername });
break;
case PCRobotCMD.getContact:
nmCore.NM_GetContactList(curWx.socketHandle);
break;
case PCRobotCMD.getPay:
{
var Invalidtime = 0;
var Transferid = string.Empty;
var dic = HttpExtend.JsonToDictionary(data.ToMessage);
if (dic.ContainsKey("Invalidtime"))
Invalidtime = int.Parse(dic["Invalidtime"].ToString());
if (dic.ContainsKey("Transferid"))
Transferid = dic["Transferid"].ToString();
nmCore.NM_GetMoney(curWx.socketHandle, data.ToUsername, Transferid, Invalidtime);
}
break;
case PCRobotCMD.agreeFriend:
nmCore.NM_PassApply(curWx.socketHandle, data.ToMessage);
break;
case PCRobotCMD.deleteFriend:
nmCore.NM_DelFriend(curWx.socketHandle, data.ToMessage);
break;
case PCRobotCMD.getGroupMember:
nmCore.NM_GetGroupMember(curWx.socketHandle, data.ToMessage);
break;
case PCRobotCMD.getWxidInfo:
nmCore.NM_GetWxidInfo(curWx.socketHandle, string.Empty, data.ToMessage);
break;
case PCRobotCMD.editContacts:
nmCore.NM_SetFriendMark(curWx.socketHandle, data.ToUsername, data.ToMessage);
break;
case PCRobotCMD.stateOpt:
nmCore.NM_StateOpt(curWx.socketHandle, 2, data.ToUsername, data.ToMessage == "1");
break;
//case PCRobotCMD.heartBreak:
// break;`
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
/// <summary>
/// 通信事件_接收消息
/// </summary>
/// <param name="ConnID"></param>
/// <param name="RecvJson"></param>
void Event_RecvMsg(int ConnID, JObject RecvJson)
{
try
{
NMHelper.nmMsgInfo MsgInfo = new NMHelper.nmMsgInfo();
MsgInfo.RecvWxid = nmHeler.Json_GetString(RecvJson, "RecvWxid", true);
MsgInfo.Type = nmHeler.Json_GetIntEx(RecvJson, "Type");
MsgInfo.State = nmHeler.Json_GetIntEx(RecvJson, "State");
MsgInfo.Time = nmHeler.Json_GetIntEx(RecvJson, "Time");
MsgInfo.IsSend = nmHeler.Json_GetIntEx(RecvJson, "Sender");
MsgInfo.LocalMsgID = nmHeler.Json_GetIntEx(RecvJson, "LocalID");
MsgInfo.ServerMsgID = nmHeler.Json_GetString(RecvJson, "ServerID", false);
MsgInfo.Wxid_1 = nmHeler.Json_GetString(RecvJson, "Wxid_1", true);
MsgInfo.Nick_1 = nmHeler.Json_GetString(RecvJson, "Nick_1", true);
MsgInfo.Wxid_2 = nmHeler.Json_GetString(RecvJson, "Wxid_2", true);
MsgInfo.Nick_2 = nmHeler.Json_GetString(RecvJson, "Nick_2", true);
MsgInfo.Msg = nmHeler.Json_GetString(RecvJson, "Msg", true);
MsgInfo.Source = nmHeler.Json_GetString(RecvJson, "Source", true);
if (filtrationWX.Contains(MsgInfo.Wxid_1)) return;
string outLog = (MsgInfo.IsSend > 0 ? "[发出消息]" : "[接收消息]") + MsgInfo.RecvWxid + NewLine;
outLog += "类型:" + MsgInfo.Type.ToString() + " 状态:" + MsgInfo.State.ToString() + " 时间:" + nmHeler.Timestamp2DataTime(MsgInfo.Time) + NewLine;
outLog += "本地ID" + MsgInfo.LocalMsgID.ToString() + " 服务器ID" + MsgInfo.ServerMsgID + NewLine;
outLog += "Wxid1" + MsgInfo.Wxid_1 + (MsgInfo.Nick_1 == String.Empty ? string.Empty : "(" + MsgInfo.Nick_1 + ")") + NewLine;
outLog += "Wxid2" + MsgInfo.Wxid_2 + (MsgInfo.Nick_2 == String.Empty ? string.Empty : "(" + MsgInfo.Nick_2 + ")") + NewLine;
outLog += "消息内容:" + MsgInfo.Msg + NewLine + "附加消息:" + MsgInfo.Source + NewLine;
if ((MsgInfo.Type == 43 || MsgInfo.Type == 49) && MsgInfo.IsSend == 0)//视频、文件
{
string FilePath = nmHeler.Json_GetString(RecvJson, "File", true);
if (FilePath != string.Empty)
{
outLog += "文件路径:" + FilePath;
if (socketClient != null)
{
if (File.Exists(FilePath))
{
WechatReceiveMsg msg = new WechatReceiveMsg();
msg.IsSend = MsgInfo.IsSend == 1 ? true : false;
msg.RobotUsername = MsgInfo.RecvWxid;
msg.RobotUsernick = GetRobotNick(MsgInfo.RecvWxid);
msg.RobotType = RobotType.;
msg.Cmd = PCRobotCMD.rcvFile;
if (MsgInfo.Type == 43)//视频
{
msg.FromMessage = $"[视频={FilePath}]";
msg.FromMessageType = WechatMsgType.;
msg.FileCDNXML = MsgInfo.Msg;
}
else if (MsgInfo.Type == 49)//文件
{
msg.FromMessage = $"[文件={FilePath}]";
msg.FromMessageType = WechatMsgType.;
}
if (MsgInfo.Wxid_1.Contains("@chatroom"))
{
msg.FromGroupid = MsgInfo.Wxid_1;
msg.FromUsername = MsgInfo.Wxid_2;
msg.FromUsernick = MsgInfo.Nick_2;
}
else if (MsgInfo.Wxid_2.Contains("@chatroom"))
{
msg.FromGroupid = MsgInfo.Wxid_2;
msg.FromUsername = MsgInfo.Wxid_1;
msg.FromUsernick = MsgInfo.Nick_1;
}
else
{
msg.FromUsername = MsgInfo.Wxid_1;
msg.FromUsernick = MsgInfo.Nick_1;
}
if (string.IsNullOrEmpty(msg.FromUsernick) || string.IsNullOrEmpty(msg.RobotUsernick))
{
var t = nms.FirstOrDefault(p => p.Wxid == MsgInfo.RecvWxid);
if (t.Wxid != null)
{
msg.RobotUsernick = t.Nick;
var m = nmWxidInfos[t.socketHandle];
if (m != null)
{
var tar = m.FirstOrDefault(p => p.Wxid == MsgInfo.Wxid_1);
if (!string.IsNullOrEmpty(tar.Nick) && string.IsNullOrEmpty(msg.FromUsernick))
{
msg.FromUsernick = tar.Nick;
}
}
}
}
socketClient.Send(msg);
}
}
}
}
else if ((MsgInfo.Type == 3 || MsgInfo.Type == 34) && MsgInfo.IsSend == 0)//图片、语音
{
string FileData = nmHeler.Json_GetString(RecvJson, "File", false);
if (FileData != string.Empty)
{
byte[] FileBytes = Convert.FromBase64String(FileData);
string FilePath = nmHeler.SaveFile(MsgInfo.RecvWxid, MsgInfo.Wxid_1, (MsgInfo.Type == 3 ? "IMAGE" : "VOICE"), MsgInfo.ServerMsgID, (MsgInfo.Type == 3 ? "jpg" : "silk"), FileBytes);
outLog += "文件路径:" + FilePath;
//if (MsgInfo.Type == 3 && chk_MaxPicture.Checked == true && MsgInfo.IsSend == 0)
//{
// string MaxFilePath = FilePath.Replace(MsgInfo.ServerMsgID, MsgInfo.ServerMsgID + "_MAX");
// nmCore.NM_GetImageByCDN(ConnID, MsgInfo.Msg, MaxFilePath);
//}
if (socketClient != null)
{
if (File.Exists(FilePath))
{
WechatReceiveMsg msg = new WechatReceiveMsg();
//msg.IsSend = MsgInfo.IsSend == 1 ? true : false;
msg.RobotUsername = MsgInfo.RecvWxid;
msg.RobotUsernick = GetRobotNick(MsgInfo.RecvWxid);
msg.RobotType = RobotType.;
if (MsgInfo.Type == 3)//图片
{
msg.IsSend = MsgInfo.IsSend == 1 ? true : false;
msg.Cmd = PCRobotCMD.rcvImg;
msg.FromMessage = $"[图片={FilePath}]";
msg.FromMessageType = WechatMsgType.;
msg.FileCDNXML = MsgInfo.Msg;
}
else if (MsgInfo.Type == 34)//语音
{
msg.IsSend = false;//MsgInfo.IsSend == 1 ? true : false;
msg.Cmd = PCRobotCMD.rcvFile;
msg.FromMessage = $"[语音={FilePath}]";
msg.FromMessageType = WechatMsgType.;
}
if (MsgInfo.Wxid_1.Contains("@chatroom"))
{
msg.FromGroupid = MsgInfo.Wxid_1;
msg.FromUsername = MsgInfo.Wxid_2;
msg.FromUsernick = MsgInfo.Nick_2;
}
else if (MsgInfo.Wxid_2.Contains("@chatroom"))
{
msg.FromGroupid = MsgInfo.Wxid_2;
msg.FromUsername = MsgInfo.Wxid_1;
msg.FromUsernick = MsgInfo.Nick_1;
}
else
{
msg.FromUsername = MsgInfo.Wxid_1;
msg.FromUsernick = MsgInfo.Nick_1;
}
if (string.IsNullOrEmpty(msg.FromUsernick) || string.IsNullOrEmpty(msg.RobotUsernick))
{
var t = nms.FirstOrDefault(p => p.Wxid == MsgInfo.RecvWxid);
if (t.Wxid != null)
{
msg.RobotUsernick = t.Nick;
var m = nmWxidInfos[t.socketHandle];
if (m != null)
{
var tar = m.FirstOrDefault(p => p.Wxid == MsgInfo.Wxid_1);
if (!string.IsNullOrEmpty(tar.Nick) && string.IsNullOrEmpty(msg.FromUsernick))
{
msg.FromUsernick = tar.Nick;
}
}
}
}
socketClient.Send(msg);
}
}
}
}
WriteLog(outLog);
//申请好友
if (MsgInfo.Type == 37)
{
//nmCore.NM_PassApply(ConnID, MsgInfo.Msg);
WechatApplyFriend wXApply = new WechatApplyFriend();
wXApply.Cmd = PCRobotCMD.applyFriend;
wXApply.RobotUsername = MsgInfo.RecvWxid;
wXApply.RobotUsernick = GetRobotNick(MsgInfo.RecvWxid);
wXApply.RobotType = RobotType.;
var reg = Regex.Match(MsgInfo.Msg, @"content=""(?<申请文本>[^""]*?)""");
if (reg.Success)
wXApply.Message = reg.Groups["申请文本"].Value;
reg = Regex.Match(MsgInfo.Msg, @"sourceusername=""(?<账号>[^""]*?)"" sourcenickname=""(?<昵称>[^""]*?)""");
if (reg.Success)
{
wXApply.OldFriendWxid = reg.Groups["账号"].Value;
wXApply.OldFriendNick = reg.Groups["昵称"].Value;
}
reg = Regex.Match(MsgInfo.Msg, @"fromusername=""(?<账号>[^""]*?)""");
if (reg.Success)
{
if (!string.IsNullOrWhiteSpace(reg.Groups["账号"].Value))
wXApply.NewFriendWxid = reg.Groups["账号"].Value;
else
{
reg = Regex.Match(MsgInfo.Msg, @"alias=""(?<账号>[^""]*?)""");
if (reg.Success)
wXApply.NewFriendWxid = reg.Groups["账号"].Value;
}
}
reg = Regex.Match(MsgInfo.Msg, @"fromnickname=""(?<昵称>[^""]*?)""");
if (reg.Success)
wXApply.NewFriendNick = reg.Groups["昵称"].Value;
wXApply.Token = MsgInfo.Msg;
socketClient.Send(wXApply);
}
if (MsgInfo.IsSend == 0 && MsgInfo.Type == 49)
{
#region
//if (MsgInfo.Msg.IndexOf("微信转账") != -1 && MsgInfo.Msg.IndexOf("收到转账") != -1)
//{
// string State = nmHeler.StringMid(MsgInfo.Msg, "<paysubtype>", "</paysubtype>");
// string Transid = nmHeler.StringMid(MsgInfo.Msg, "transferid><![CDATA[", "]]></transferid>");
// int dwTime = 0;
// int.TryParse(nmHeler.StringMid(MsgInfo.Msg, "<invalidtime><![CDATA[", "]]></invalidtime>"), out dwTime);
// if (State == "1" && Transid != string.Empty)
// {
// nmCore.NM_GetMoney(ConnID, MsgInfo.Wxid_1, Transid, dwTime);
// }
//}
if (MsgInfo.Msg.IndexOf("微信转账") != -1 && MsgInfo.Msg.IndexOf("收到转账") != -1)
{
string State = nmHeler.StringMid(MsgInfo.Msg, "<paysubtype>", "</paysubtype>");
string Transid = nmHeler.StringMid(MsgInfo.Msg, "transferid><![CDATA[", "]]></transferid>");
int dwTime = 0;
int.TryParse(nmHeler.StringMid(MsgInfo.Msg, "<invalidtime><![CDATA[", "]]></invalidtime>"), out dwTime);
if (State == "1" && Transid != string.Empty)
{
WechatReicevePay reicevePay = new WechatReicevePay();
reicevePay.RobotUsername = MsgInfo.RecvWxid;
reicevePay.RobotUsernick = GetRobotNick(MsgInfo.RecvWxid);
reicevePay.RobotType = RobotType.;
if (!string.IsNullOrWhiteSpace(MsgInfo.Wxid_1))
{
reicevePay.FromUsername = MsgInfo.Wxid_1;
reicevePay.FromUsernick = MsgInfo.Nick_1;
}
reicevePay.Cmd = PCRobotCMD.receivePay;
reicevePay.Invalidtime = dwTime.ToString();
reicevePay.Transferid = Transid;
var reg = Regex.Match(MsgInfo.Msg, "收到转账(?<金额>.+)元");
if (reg.Success)
reicevePay.Money = double.Parse(reg.Groups["金额"].Value);
if (reicevePay.RobotUsernick == null) reicevePay.RobotUsernick = string.Empty;
socketClient.Send(reicevePay);
return;
}
}
#endregion
//自动接受群聊邀请
//if (MsgInfo.IsSend == 0 && MsgInfo.Type == 49)
//{
//if (MsgInfo.Msg.IndexOf("邀请你加入群聊") != -1 && MsgInfo.Msg.IndexOf("mmsupport-bin/addchatroombyinvite") != -1)
//{
// string InviteURL = nmHeler.StringMid(MsgInfo.Msg, "<url><![CDATA[", "]]></url>");
// if (InviteURL != string.Empty)
// {
// nmCore.NM_GetA8Key(ConnID, MsgInfo.Wxid_1, InviteURL);
// }
//}
//}
}
//文本消息、xml
if (MsgInfo.Type == 1 || MsgInfo.Type == 49)
{
//if (socketClient != null && MsgInfo.IsSend == 0)
if (socketClient != null)
{
var isSend = true;
if (MsgInfo.IsSend == 1)//判断是否为机器人自动回复的内容(这里似乎有个问题,图片、xml、无法正常判断是否为自动回复)
{
isSend = !Regex.IsMatch(MsgInfo.Msg.Trim(), @"<\?xml version=""1\.0""\?>([\w\W]+)</msg>");
if (isSend)
isSend = !Regex.IsMatch(MsgInfo.Msg.Trim(), @"(<msg>[\w\W]*?<fromusername>[\w\W]+</msg>)");
if (isSend)
isSend = WechatClient.IsAuxiliaryInput(MsgInfo.RecvWxid, MsgInfo.Wxid_1, MsgInfo.Msg);
}
if (isSend)
{
WechatReceiveMsg msg = new WechatReceiveMsg();
msg.Cmd = PCRobotCMD.rcvTxt;
msg.IsSend = MsgInfo.IsSend == 1 ? true : false;
msg.RobotUsername = MsgInfo.RecvWxid;
msg.RobotUsernick = GetRobotNick(MsgInfo.RecvWxid);
msg.RobotType = RobotType.;
msg.FromMessageType = WechatMsgType.;
if (MsgInfo.Wxid_1.Contains("@chatroom"))
{
msg.FromGroupid = MsgInfo.Wxid_1;
msg.FromUsername = MsgInfo.Wxid_2;
msg.FromUsernick = MsgInfo.Nick_2;
}
else if (MsgInfo.Wxid_2.Contains("@chatroom"))
{
msg.FromGroupid = MsgInfo.Wxid_2;
msg.FromUsername = MsgInfo.Wxid_1;
msg.FromUsernick = MsgInfo.Nick_1;
}
else
{
msg.FromUsername = MsgInfo.Wxid_1;
msg.FromUsernick = MsgInfo.Nick_1;
}
if (string.IsNullOrEmpty(msg.FromUsernick) || string.IsNullOrEmpty(msg.RobotUsernick))
{
var t = nms.FirstOrDefault(p => p.Wxid == MsgInfo.RecvWxid);
if (t.Wxid != null)
{
msg.RobotUsernick = t.Nick;
if (nmWxidInfos.ContainsKey(t.socketHandle))
{
var m = nmWxidInfos[t.socketHandle];
if (m != null)
{
var tar = m.FirstOrDefault(p => p.Wxid == MsgInfo.Wxid_1);
if (!string.IsNullOrEmpty(tar.Nick) && string.IsNullOrEmpty(msg.FromUsernick))
{
msg.FromUsernick = tar.Nick;
}
}
}
}
}
msg.FromMessage = MsgInfo.Msg;
socketClient.Send(msg);
}
}
}
if (MsgInfo.IsSend == 0 && MsgInfo.Type == 10000) //&& MsgInfo.State == 2)
{
if (socketClient != null)
{
//新人入群
if (MsgInfo.Wxid_1.Contains("@"))
{
var reg1 = Regex.Match(MsgInfo.Msg, @"""(?<邀请人昵称>.*)""邀请""(?<新人昵称>.*)""加入了群聊");
var reg2 = Regex.Match(MsgInfo.Msg, @"你邀请""(?<新人昵称>.*)""加入了群聊");
var reg3 = Regex.Match(MsgInfo.Msg, @"""(?<新人昵称>.*)""通过扫描""(?<邀请人昵称>.*)""分享的二维码加入群聊");
var reg4 = Regex.Match(MsgInfo.Msg, @"""(?<新人昵称>.*)""通过扫描你分享的二维码加入群聊");
if (reg1.Success || reg2.Success || reg3.Success || reg4.Success)
{
WechatNewMemer newMember = new WechatNewMemer();
newMember.Cmd = PCRobotCMD.newMember;
newMember.RobotType = RobotType.;
newMember.RobotUsername = MsgInfo.RecvWxid;
newMember.RobotUsernick = GetRobotNick(MsgInfo.RecvWxid);
if (reg1.Success)
{
newMember.SourceNick = reg1.Groups["邀请人昵称"].Value;
newMember.MemberNick = reg1.Groups["新人昵称"].Value;
}
else if (reg2.Success)
{
newMember.SourceNick = newMember.RobotUsernick;
newMember.MemberNick = reg2.Groups["新人昵称"].Value;
}
else if (reg3.Success)
{
newMember.SourceNick = reg3.Groups["邀请人昵称"].Value;
newMember.MemberNick = reg3.Groups["新人昵称"].Value;
}
else if (reg4.Success)
{
newMember.SourceNick = newMember.RobotUsernick;
newMember.MemberNick = reg4.Groups["新人昵称"].Value;
}
if (MsgInfo.Wxid_1.Contains("@chatroom"))
{
newMember.GroupId = MsgInfo.Wxid_1;
newMember.GroupNick = MsgInfo.Nick_1;
}
var t = nms.FirstOrDefault(p => p.Wxid == MsgInfo.RecvWxid);
if (t.Wxid != null)
{
newMember.RobotUsernick = t.Nick;
if (nmWxidInfos.ContainsKey(t.socketHandle))
{
var m = nmWxidInfos[t.socketHandle];
if (m != null)
{
var tar = m.FirstOrDefault(p => p.Wxid == MsgInfo.Wxid_1);
if (!string.IsNullOrEmpty(tar.Nick) && string.IsNullOrEmpty(newMember.GroupNick))
{
newMember.GroupNick = tar.Nick;
}
}
}
}
socketClient.Send(newMember);
}
}
else//新增好友
{
#region
var reg1 = Regex.Match(MsgInfo.Msg, "^你已添加了(.*?),现在可以开始聊天了。$");
var reg2 = Regex.Match(MsgInfo.Msg, "^(.*?)刚刚把你添加到通讯录,现在可以开始聊天了。$");
if (reg1.Success || reg2.Success)
{
WechatNewFriend msg = new WechatNewFriend();
msg.Cmd = PCRobotCMD.newfriend;
msg.RobotUsername = MsgInfo.RecvWxid;
msg.RobotUsernick = GetRobotNick(MsgInfo.RecvWxid);
msg.RobotType = RobotType.;
msg.FromUserName = MsgInfo.Wxid_1;
msg.FromUserNick = MsgInfo.Nick_1;
socketClient.Send(msg);
}
#endregion
}
}
}
//自动填充消息内容,用于撤回消息
//if (MsgInfo.IsSend == 1 && ConnID == nmHeler.Socket_ConnId)
//{
//text_Recvke_Wxid.Text = MsgInfo.Wxid_1;
//text_Recvke_Sid.Text = MsgInfo.ServerMsgID;
//text_Recvke_Message.Text = MsgInfo.Msg;
//}
//名片消息自动填充数据
//if (MsgInfo.IsSend == 0 && MsgInfo.Type == 42 && ConnID == nmHeler.Socket_ConnId)
//{
//string v1 = nmHeler.StringMid(MsgInfo.Msg, "username=\"", "\" nickname=");
//string v2 = nmHeler.StringMid(MsgInfo.Msg, "antispamticket=\"", "\" /");
//text_Friend_v1.Text = v1;
//text_Friend_v2.Text = v2;
//}
}
catch (Exception ex)
{
}
}
/// <summary>
/// 通信事件_切换聊天对象
/// </summary>
/// <param name="ConnID"></param>
/// <param name="RecvJson"></param>
void Event_SelectTalker(int ConnID, JObject RecvJson)
{
try
{
//NMHelper.nmWxidInfo WxidInfo = new NMHelper.nmWxidInfo();
//string RecvWxid = nmHeler.Json_GetString(RecvJson, "RecvWxid", true);
//WxidInfo.Wxid = nmHeler.Json_GetString(RecvJson, "Wxid", true);
//WxidInfo.WxNo = nmHeler.Json_GetString(RecvJson, "WxNo", true);
//WxidInfo.Nick = nmHeler.Json_GetString(RecvJson, "Nick", true);
//WxidInfo.Mark = nmHeler.Json_GetString(RecvJson, "Mark", true);
//WxidInfo.HeadIMG = nmHeler.Json_GetString(RecvJson, "HeadIMG", true);
//string outLog = "[切换聊天对象]" + RecvWxid + NewLine;
//outLog += "Wxid" + WxidInfo.Wxid + NewLine;
//outLog += WxidInfo.WxNo == string.Empty ? string.Empty : "微信号:" + WxidInfo.Wxid + NewLine;
//outLog += "昵称:" + WxidInfo.Nick + NewLine;
//outLog += WxidInfo.Mark == string.Empty ? string.Empty : "备注:" + WxidInfo.Mark;
////outLog += "头像:" + WxidInfo.HeadIMG;
//WriteLog(outLog);
var wxid = nmHeler.Json_GetString(RecvJson, "Wxid", true);
nmCore.NM_SetObject(curWx.socketHandle, 2, wxid);
}
catch (Exception ex)
{
}
}
void Event_RecvContactList(int ConnID, JObject RecvJson)
{
try
{
var recvWxid = nmHeler.Json_GetString(RecvJson, "RecvWxid", true);
string outLog = "[通讯录列表]" + recvWxid + NewLine;
int dwState = nmHeler.Json_GetIntEx(RecvJson, "State");
if (dwState == 0)
{
outLog += "通讯录列表读取失败!";
WriteLog(outLog);
return;
}
JArray m_List = RecvJson.Value<JArray>("List");
if (m_List != null)
{
List<List<nmWxidInfo>> nmss = new List<List<nmWxidInfo>>();
List<nmWxidInfo> mis = new List<nmWxidInfo>();
var count = 40;
var rem = m_List.Count % count;
var num = m_List.Count / count;
for (int i = 0; i < m_List.Count; i++)
{
JToken JtMember = m_List.ElementAt(i);
if (JtMember != null)
{
NMHelper.nmWxidInfo MemberInfo = new NMHelper.nmWxidInfo();
MemberInfo.Type = nmHeler.Json_GetIntEx((JObject)JtMember, "Type");
MemberInfo.List = nmHeler.Json_GetIntEx((JObject)JtMember, "List");
MemberInfo.Wxid = nmHeler.Json_GetString((JObject)JtMember, "Wxid", true);
MemberInfo.WxNo = nmHeler.Json_GetString((JObject)JtMember, "WxNo", true);
MemberInfo.Nick = nmHeler.Json_GetString((JObject)JtMember, "Nick", true);
MemberInfo.Mark = nmHeler.Json_GetString((JObject)JtMember, "Mark", true);
MemberInfo.HeadIMG = nmHeler.Json_GetString((JObject)JtMember, "HeadIMG", true);
mis.Add(MemberInfo);
if (mis.Count >= count)
{
nmss.Add(mis);
mis = new List<nmWxidInfo>();
}
else if (nmss.Count == num && mis.Count == rem)
{
nmss.Add(mis);
}
}
}
if (socketClient != null)
{
foreach (var item in nmss)
{
WechatContactList msg = new WechatContactList();
msg.RobotUsername = recvWxid;
msg.RobotUsernick = GetRobotNick(recvWxid);
msg.RobotType = RobotType.;
msg.Cmd = PCRobotCMD.rcvContactList;
msg.Message = HttpHelper.ObjectToJson(new Dictionary<string, List<nmWxidInfo>>() { { "data", item } });
socketClient.Send(msg);
Thread.Sleep(5);
}
}
}
}
catch (Exception ex)
{
}
}
void Event_RecvGroupMember(int ConnID, JObject RecvJson)
{
try
{
//string outLog = "[群员列表]" + nmHeler.Json_GetString(RecvJson, "RecvWxid", true) + NewLine;
var recvWxid = nmHeler.Json_GetString(RecvJson, "RecvWxid", true);
int dwState = nmHeler.Json_GetIntEx(RecvJson, "State");
if (dwState == 0)
{
//outLog += nmHeler.Json_GetString(RecvJson, "GroupID", false) + "的群员列表读取失败!";
//WriteLog(outLog);
return;
}
JArray m_List = RecvJson.Value<JArray>("List");
if (m_List != null)
{
List<List<nmWxidInfo>> nmss = new List<List<nmWxidInfo>>();
List<nmWxidInfo> mis = new List<nmWxidInfo>();
var count = 20;
var rem = m_List.Count % count;
var num = m_List.Count / count;
for (int i = 0; i < m_List.Count; i++)
{
JToken JtMember = m_List.ElementAt(i);
if (JtMember != null)
{
NMHelper.nmWxidInfo MemberInfo = new NMHelper.nmWxidInfo();
MemberInfo.Type = nmHeler.Json_GetIntEx((JObject)JtMember, "Type");
MemberInfo.List = nmHeler.Json_GetIntEx((JObject)JtMember, "List");
MemberInfo.Wxid = nmHeler.Json_GetString((JObject)JtMember, "Wxid", true);
MemberInfo.WxNo = nmHeler.Json_GetString((JObject)JtMember, "WxNo", true);
MemberInfo.Nick = nmHeler.Json_GetString((JObject)JtMember, "Nick", true);
MemberInfo.Mark = nmHeler.Json_GetString((JObject)JtMember, "Mark", true);
MemberInfo.HeadIMG = nmHeler.Json_GetString((JObject)JtMember, "HeadIMG", true);
mis.Add(MemberInfo);
if (mis.Count >= count)
{
nmss.Add(mis);
mis = new List<nmWxidInfo>();
}
else if (nmss.Count == num && mis.Count == rem)
{
nmss.Add(mis);
}
}
}
if (socketClient != null)
{
foreach (var item in nmss)
{
WechatGroupMember msg = new WechatGroupMember();
msg.RobotUsername = recvWxid;
msg.RobotUsernick = GetRobotNick(recvWxid);
msg.RobotType = RobotType.;
msg.Cmd = PCRobotCMD.rcvGroupMember;
nmGroupInfo group = new nmGroupInfo();
group.Count = nmHeler.Json_GetIntEx(RecvJson, "Count");
group.GroupID = nmHeler.Json_GetString(RecvJson, "GroupID", true);
group.List = item;
msg.Message = HttpHelper.ObjectToJson(new Dictionary<string, nmGroupInfo>() { { "data", group } });
socketClient.Send(msg);
Thread.Sleep(5);
}
}
//outLog += nmHeler.Json_GetString(RecvJson, "GroupID", true) + "的群员列表读取成功,群员数:" + list_GroupMember.Items.Count.ToString();
//WriteLog(outLog);
}
}
catch (Exception ex)
{
}
}
void Event_RecvWxidInfo(int ConnID, JObject RecvJson)
{
try
{
var recvWxid = nmHeler.Json_GetString(RecvJson, "RecvWxid", true);
string outLog = "[下载详细信息]" + nmHeler.Json_GetString(RecvJson, "RecvWxid", true) + NewLine;
int dwState = nmHeler.Json_GetIntEx(RecvJson, "State");
if (dwState == -1) { outLog += "下载详细信息超时(原因:服务器无返回)!"; }
else if (dwState == 0) { outLog += "下载详细信息失败(原因:可能是输入的Wxid不正确)!"; }
else if (dwState == 1)
{
string szGroupID = nmHeler.Json_GetString(RecvJson, "GroupId", true);
NMHelper.nmWxidInfo MemberInfo = new NMHelper.nmWxidInfo();
MemberInfo.Wxid = nmHeler.Json_GetString(RecvJson, "Wxid", true);
MemberInfo.WxNo = nmHeler.Json_GetString(RecvJson, "WxNo", true);
MemberInfo.Nick = nmHeler.Json_GetString(RecvJson, "Nick", true);
MemberInfo.V1 = nmHeler.Json_GetString(RecvJson, "v1", true);
MemberInfo.HeadIMG = nmHeler.Json_GetString(RecvJson, "HeadIMG", true);
MemberInfo.Address = nmHeler.Json_GetString(RecvJson, "Address", true);
MemberInfo.Sex = nmHeler.Json_GetIntEx(RecvJson, "Sex").ToString();
outLog += szGroupID == string.Empty ? string.Empty : "群ID" + szGroupID + NewLine;
outLog += "Wxid" + MemberInfo.Wxid + NewLine;
outLog += MemberInfo.WxNo == string.Empty ? string.Empty : "微信号:" + MemberInfo.WxNo + NewLine;
outLog += "昵称:" + MemberInfo.Nick + NewLine;
outLog += MemberInfo.V1 == string.Empty ? string.Empty : "v1" + MemberInfo.V1 + NewLine;
outLog += "性别:" + MemberInfo.Sex + NewLine;
outLog += MemberInfo.Address == string.Empty ? string.Empty : "地区:" + MemberInfo.Address + NewLine;
outLog += MemberInfo.HeadIMG == string.Empty ? string.Empty : "头像:" + MemberInfo.HeadIMG + NewLine;
WechatContactList msg = new WechatContactList();
msg.RobotUsername = recvWxid;
msg.RobotUsernick = GetRobotNick(recvWxid);
msg.RobotType = RobotType.;
msg.Cmd = PCRobotCMD.rcvContactList;
msg.Message = HttpHelper.ObjectToJson(new Dictionary<string, List<nmWxidInfo>>() { { "data", new List<nmWxidInfo>() { MemberInfo } } });
socketClient.Send(msg);
Thread.Sleep(5);
}
WriteLog(outLog);
}
catch (Exception ex)
{
}
}
void Event_AddFriend(int ConnID, JObject RecvJson)
{
try
{
//string outLog = "[添加好友]" + nmHeler.Json_GetString(RecvJson, "RecvWxid", true) + NewLine;
//int DataType = nmHeler.Json_GetIntEx(RecvJson, "DataType");
//string Data = nmHeler.Json_GetString(RecvJson, "Data", true);
//int Type = nmHeler.Json_GetIntEx(RecvJson, "Type");
//int AddType = nmHeler.Json_GetIntEx(RecvJson, "AddType");
//string Wxid = nmHeler.Json_GetString(RecvJson, "Wxid", true);
//string v2 = nmHeler.Json_GetString(RecvJson, "V2", true);
//string Message = nmHeler.Json_GetString(RecvJson, "Message", true);
//outLog += "添加返回:[" + DataType.ToString() + "]" + (DataType == 0 ? "已发送好友请求或已添加好友。" : Data) + NewLine;
//outLog += "添加类型:" + Type.ToString() + " 添加来源:" + AddType.ToString() + NewLine;
//outLog += "Wxid" + Wxid;
//outLog += v2 == string.Empty ? string.Empty : NewLine + "v2" + v2;
//outLog += Message == string.Empty ? string.Empty : NewLine + "附加消息:" + Message;
//WriteLog(outLog);
//if (Type == 1 && DataType == -44)
//{
// nmCore.NM_AddFriend(ConnID, 2, AddType, Wxid, v2, text_Friend_Message.Text);
//}
}
catch (Exception ex)
{
}
}
void Event_CreateGroup(int ConnID, JObject RecvJson)
{
try
{
//string outLog = "[创建群聊]" + nmHeler.Json_GetString(RecvJson, "RecvWxid", true) + NewLine;
//string Data = nmHeler.Json_GetString(RecvJson, "Data", true);
//string GroupID = nmHeler.Json_GetString(RecvJson, "GroupID", true);
//outLog += "建群返回:" + Data;
//outLog += GroupID == string.Empty ? string.Empty : NewLine + "群聊ID" + GroupID + NewLine;
//JArray MemberList = RecvJson.Value<JArray>("List");
//if (MemberList != null)
//{
// outLog += "群员列表:";
// for (int i = 0; i < MemberList.Count; i++)
// {
// JToken JtMember = MemberList.ElementAt(i);
// if (JtMember != null)
// {
// string Wxid = nmHeler.Json_GetString((JObject)JtMember, "Wxid", true);
// string Nick = nmHeler.Json_GetString((JObject)JtMember, "Nick", true);
// int state = nmHeler.Json_GetIntEx((JObject)JtMember, "State");
// if (Wxid != string.Empty)
// {
// outLog += NewLine + "[" + state.ToString() + "]" + (state == 0 ? "[成功]" : "[失败]");
// outLog += Wxid + (Nick == string.Empty ? string.Empty : "(" + Nick + ")");
// }
// }
// }
//}
//WriteLog(outLog);
}
catch (Exception ex)
{
}
}
void Event_GetFavList(int ConnID, JObject RecvJson)
{
try
{
//string outLog = "[收藏列表]" + nmHeler.Json_GetString(RecvJson, "RecvWxid", true) + NewLine;
//JArray FavList = RecvJson.Value<JArray>("List");
//if (FavList != null)
//{
// list_Fav.Items.Clear();
// int dwCount = FavList.Count;
// if (dwCount != 0)
// {
// list_Fav.BeginUpdate();
// for (int i = 0; i < dwCount; i++)
// {
// JToken JtMember = FavList.ElementAt(i);
// if (JtMember != null)
// {
// int Type = nmHeler.Json_GetIntEx((JObject)JtMember, "Type");
// string SearchKey = nmHeler.Json_GetString((JObject)JtMember, "SearchKey", true);
// string TypeName = nmHeler.GetFavType(Type);
// ListViewItem FavItem = new ListViewItem();
// FavItem.Text = i.ToString();
// FavItem.SubItems.Add(TypeName);
// FavItem.SubItems.Add(SearchKey == string.Empty ? "[" + TypeName + "文件]" : SearchKey);
// list_Fav.Items.Add(FavItem);
// }
// }
// list_Fav.EndUpdate();
// outLog += "收藏列表读取成功,共" + dwCount.ToString() + "条记录!";
// }
// else
// {
// outLog += "没有收藏";
// }
//}
//WriteLog(outLog);
}
catch (Exception ex)
{
}
}
void Event_GetA8Key(int ConnID, JObject RecvJson)
{
try
{
//string RecvWxid = nmHeler.Json_GetString(RecvJson, "RecvWxid", true);
//string outLog = "[GetA8Key]" + RecvWxid + NewLine;
//string URL = nmHeler.Json_GetString(RecvJson, "URL", true);
//string LastURL = nmHeler.Json_GetString(RecvJson, "LastURL", true);
//outLog += "获取链接:" + URL + NewLine;
//outLog += "返回链接:" + LastURL;
//WriteLog(outLog);
//if (URL.IndexOf("mmsupport-bin/addchatroombyinvite") != -1)
//{
// HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.Create(URL);
// Request.Method = "POST";
// Request.AllowAutoRedirect = false;
// Request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
// Request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.556.400 QQBrowser/9.0.2524.400";
// Request.Referer = URL;
// Request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8,en-us;q=0.6,en;q=0.5;q=0.4");
// HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();
// string hLocation = Response.GetResponseHeader("Location").ToString();
// if (hLocation != "")
// {
// if (hLocation.IndexOf("chatroom") != -1)
// {
// string GroupID = nmHeler.StringMid(hLocation, "weixin://jump/mainframe/", "@chatroom");
// WriteLog("[接受群聊邀请]" + RecvWxid + NewLine + "群聊ID" + GroupID + "@chatroom");
// }
// }
//}
}
catch (Exception ex)
{
}
}
void Event_GroupInvite(int ConnID, JObject RecvJson)
{
try
{
string RecvWxid = nmHeler.Json_GetString(RecvJson, "RecvWxid", true);
string outLog = "[群员动态-进群]" + RecvWxid + NewLine;
string GroupID = nmHeler.Json_GetString(RecvJson, "GroupID", true);
outLog = "群聊ID" + GroupID + NewLine;
JArray MemberList = RecvJson.Value<JArray>("List");
if (MemberList != null)
{
for (int i = 0; i < MemberList.Count; i++)
{
JToken JtMember = MemberList.ElementAt(i);
if (JtMember != null)
{
string Wxid = nmHeler.Json_GetString((JObject)JtMember, "Wxid", true);
string Nick = nmHeler.Json_GetString((JObject)JtMember, "Nick", true);
string InvWxid = nmHeler.Json_GetString((JObject)JtMember, "InvWxid", true);
string InvNick = nmHeler.Json_GetString((JObject)JtMember, "InvNick", true);
outLog += "[" + (i + 1).ToString() + "]" + NewLine;
outLog += "进群人:" + Wxid + (Nick == string.Empty ? string.Empty : "(" + Nick + ")" + NewLine);
outLog += "邀请人:" + InvWxid + (InvNick == string.Empty ? string.Empty : "(" + InvNick + ")" + NewLine);
}
}
}
WriteLog(outLog);
}
catch (Exception ex)
{
}
}
void Event_GroupQuit(int ConnID, JObject RecvJson)
{
try
{
string RecvWxid = nmHeler.Json_GetString(RecvJson, "RecvWxid", true);
string outLog = "[群员动态-退群]" + RecvWxid + NewLine;
string GroupID = nmHeler.Json_GetString(RecvJson, "GroupID", true);
outLog += "群聊ID" + GroupID + NewLine;
JArray MemberList = RecvJson.Value<JArray>("List");
if (MemberList != null)
{
for (int i = 0; i < MemberList.Count; i++)
{
JToken JtMember = MemberList.ElementAt(i);
if (JtMember != null)
{
string Wxid = nmHeler.Json_GetString((JObject)JtMember, "Wxid", true);
string Nick = nmHeler.Json_GetString((JObject)JtMember, "Nick", true);
outLog += "[" + (i + 1).ToString() + "]" + NewLine;
outLog += Wxid + (Nick == string.Empty ? string.Empty : "(" + Nick + ")" + NewLine);
}
}
}
WriteLog(outLog);
}
catch (Exception ex)
{
}
}
[DllImport("User32.dll", EntryPoint = "PostMessage")]
public static extern int PostMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImport("LIB.KTY.WC.dll", EntryPoint = "Run")]
public static extern IntPtr Run(string path, string dll, int port);
private IntPtr DwPid = IntPtr.Zero;
public int handle { get { return (int)DwPid; } }
public int StartWechat()
{
try
{
// api.StartWechat();
PCWechat.Wechat_Xiaoxie.StartWechat(HttpExtend.MapFile("WeChat.exe", $"PCWechat\\2.7.1.82"));
return -1;
bool isAlterXML = false;
//var path = CsharpHttpHelper.HttpExtend.MapPath("PCWechat\\2.8.0.112");
//var path = CsharpHttpHelper.HttpExtend.MapPath("PCWechat\\2.7.1.88");
var path = CsharpHttpHelper.HttpExtend.MapPath($"PCWechat\\{comboBox1.SelectedItem.ToString()}");
var wechatPath = CsharpHttpHelper.HttpExtend.MapFile("WeChatWin.dll", path);
if (!File.Exists(wechatPath))
{
var rst = MessageBox.Show($"您还没有下载{comboBox1.SelectedItem.ToString()}版本微信,是否立即下载?", "微信版本异常", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (rst == DialogResult.Yes)
{
new WechatUpdate(comboBox1.SelectedItem.ToString()).ShowDialog();
}
return -1;
}
var md5 = Common.GetMD5Hash(wechatPath);
var version = comboBox1.SelectedItem.ToString();
//PCWechat.BaseApi api = null;
//if (version == "2.7.1.82")
//{
// api = new PCWechat.Wechat_Xiaoxie();
// api.StartWechat(HttpExtend.MapFile("WeChat.exe", $"PCWechat\\{version}"));
// return -1;
//}
if ((version == "2.7.1.88" && md5 == "CED61F308EDD8CF3E2D864DF285DC2AF") || (version == "2.8.0.112" && md5 == "D13203AC5C3099D8563E16185DA944BC"))
{
string szDllPath = System.IO.Directory.GetCurrentDirectory() + "\\bin\\NanMuCore.dll";
var id = NMHelper.NM_CreateWeChatProcess(path, "WeChat.exe", szDllPath, nmHeler.Socket_Port);
return id;
}
else
{
var rst = MessageBox.Show($"启动失败,您的微信{comboBox1.SelectedItem.ToString()}版本异常,是否重新下载?\r\n注意:平时请关闭微信自动升级,不要随意升级微信!!!", "微信版本异常", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (rst == DialogResult.Yes)
{
new WechatUpdate(comboBox1.SelectedItem.ToString()).ShowDialog();
return -1;
}
}
}
catch (Exception ex)
{
throw ex;
}
return -1;
}
public void WriteLog(string str)
{
}
#endregion
public static List<nmWxidInfo> nms = new List<nmWxidInfo>();
/**
* 判断是否是xml结构
*/
public static bool isXML(string value)
{
try
{
//XmlDocument xdoc = new XmlDocument();
//xdoc.LoadXml(value);
//return true;
//上面的这里有些情况下不准
var reg = Regex.IsMatch(value.Trim(), @"(<msg><fromusername>.*</fromusername><scene>0</scene><commenturl></commenturl>[\w\W]*<appinfo><version>1</version><appname>Window wechat</appname></appinfo></msg>)");
return reg;
}
catch (Exception ex)
{
return false;
}
}
public static void alterXML()
{
try
{
var updateXml = CsharpHttpHelper.HttpExtend.MapFile("LevelUpdate.xml");
XmlDocument xdoc = new XmlDocument();
xdoc.Load(updateXml);
var rootNode = xdoc.SelectSingleNode("Files");
//获得该节点的子节点(即:该节点的第一层子节点)
bool isFind = false;
XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
foreach (XmlNode node in firstLevelNodeList)
{
if (isFind) break;
//获得该节点的属性集合
XmlAttributeCollection attributeCol = node.Attributes;
foreach (XmlAttribute attri in attributeCol)
{
//获取属性名称与属性值
string name = attri.Name;
string value = attri.Value;
if (name == "Name" && value == "PCWechat")
{
isFind = true;
continue;
}
if (isFind && name == "Version")
{
attri.Value = "2020.02.14.1";
break;
}
Console.WriteLine("{0} = {1}", name, value);
}
}
xdoc.Save(updateXml);
throw new Exception("微信版本");
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 通过机器人id获取机器人昵称
/// </summary>
/// <param name="wxid"></param>
/// <returns></returns>
private string GetRobotNick(string wxid)
{
var curWx = nms.FirstOrDefault(p => p.Wxid == wxid);
if (string.IsNullOrEmpty(curWx.Wxid))
return string.Empty;
return curWx.Nick;
}
public void lgCall(nmWxidInfo nm)
{
try
{
if (!nms.Contains(nm))
{
//Process
nms.Add(nm);
if (nm.Wxid != null)
{
if (socketClient != null)
{
WechatStatus msg = new WechatStatus();
msg.Cmd = PCRobotCMD.offline;
msg.RobotUsername = nm.Wxid;
msg.RobotUsernick = nm.Nick;
msg.RobotType = RobotType.;
msg.Status = Status.线;
socketClient.Send(msg);
}
WriteLog("[微信登陆]" + NewLine + "昵称:" + nm.Nick + NewLine + "Wxid" + nm.Wxid);
}
}
//nms.Add(nm);
UpdateUi();
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error("lgc ERROR:", $"{ex.Message} - {ex.StackTrace}");
}
}
private void button3_Click(object sender, EventArgs e)
{
try
{
foreach (var item in nms)
{
Event_Logout(item.socketHandle, new JObject(), true);
if ((IntPtr)item.handle != IntPtr.Zero)
{
PostMessage((IntPtr)item.handle, 18, 0, 0);
Process[] myproc = Process.GetProcesses();
foreach (Process items in myproc)
{
try
{
if (items.Id == item.handle)
{
items.Kill();
break;
}
}
catch (Exception)
{ }
}
}
}
nms.Clear();
UpdateUi();
}
catch (Exception ex)
{
}
}
IniHelper config = null;
private void Sleep(int number)
{
Thread t = new Thread(o => Thread.Sleep(number));
t.Start(this);
while (t.IsAlive)
{
Application.DoEvents();
}
}
private void button1_Click(object sender, EventArgs e)
{
//this.button1.Enabled = false;
try
{
if (config == null)
{
var fileName = HttpExtend.MapFile("服务器配置.ini", "Config");
config = new IniHelper(fileName);
}
config.SetValue("服务器信息", "IP", textBox1.Text);
config.SetValue("服务器信息", "Port", textBox2.Text);
config.SetValue("秘钥", "SecretKey", textBox3.Text);
if (this.button1.Text != "连接服务器")
{
if (socketClient != null)
{
socketClient.Stop = true;
socketClient.Close();
}
StateCall("您已断开与服务器的连接!");
this.button1.Text = "连接服务器";
return;
}
//MessageBox.Show("保存配置成功");
if (socketClient != null)
{
socketClient.Close();
}
socketClient.Stop = false;
socketClient.Connection(config.GetValue("服务器信息", "IP"), Convert.ToInt32(config.GetValue("服务器信息", "Port")), Rcv, Sea, config.GetValue("秘钥", "SecretKey"), StateCall);
Thread.Sleep(1000);
if (socketClient.IsConnected)
{
//socketClient.Stop = false;
this.button1.Text = "断开服务器";
//this.Close();
}
else throw new Exception("连接服务器失败,请检查是否填写正确!");
}
catch (Exception ex)
{
if (socketClient != null) socketClient.Stop = true;
MessageBox.Show(ex.Message, "友情提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public void StateCall(string str)
{
if (!string.IsNullOrEmpty(str))
{
try
{
this.Invoke(new Action(() =>
{
status.Text = str;
if (str.Contains("成功"))
{
this.groupBox1.Enabled = false;
this.button1.Text = "断开服务器";
}
else
{
this.groupBox1.Enabled = true;
this.button1.Text = "连接服务器";
}
}));
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error("sc ERROR:", $"{ex.Message} - {ex.StackTrace}");
}
}
}
private void Sea(Exception obj)
{
StateCall("连接异常:" + obj.Message);
socketClient.Close();
}
private void RefUserMethod(WechatUser user)
{
this.Invoke(new Action(delegate
{
try
{
this.listView1.Items.Clear();
foreach (var item in WechatClient.Users.Values.ToList())
{
var view = new ListViewItem(new string[] { item.Pid.ToString(),item.Wxid, item.Nickname, item.Phone });
view.Tag = item;
this.listView1.Items.Add(view);
}
}
catch (Exception)
{
}
}));
}
private void WinForm_Load(object sender, EventArgs e)
{
this.FormClosing += PCForm_FormClosing;
contextMenuStrip1.Opening += ContextMenuStrip1_Opening;
//try
//{
// IniWechat();
//}
//catch (Exception ex)
//{
// MessageBox.Show(ex.Message, "初始化微信失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
// this.Close();
// return;
//}
try
{
WechatClient.RefUserEvent = RefUserMethod;
WechatClient.Install();//安装微信,初始化注入
var fileName = HttpExtend.MapFile("服务器配置.ini", "Config");
var config = new IniHelper(fileName);
textBox1.Text = config.GetValue("服务器信息", "IP");
textBox2.Text = config.GetValue("服务器信息", "Port");
textBox3.Text = config.GetValue("秘钥", "SecretKey");
var version = config.GetValue("微信版本", "Version");
if (string.IsNullOrWhiteSpace(version))
config.SetValue("微信版本", "Version", "2.7.1.88");
var v = config.GetValue("微信版本", "Version");
for (int i = 0; i < comboBox1.Items.Count; i++)
{
if (comboBox1.Items[i].ToString() == v)
{
comboBox1.SelectedIndex = i;
break;
}
}
//comboBox1.SelectedIndex = config.GetValue("微信版本", "Version") == "2.7.1.88" ? 0 : 1;
socketClient = new SocketClient();
socketClient.Connection(config.GetValue("服务器信息", "IP"), Convert.ToInt32(config.GetValue("服务器信息", "Port")), Rcv, Sea, config.GetValue("秘钥", "SecretKey"), StateCall);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error("加载窗体 ERROR:", $"{ex.Message} - {ex.StackTrace}");
}
}
private void ContextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
if (listView1.SelectedItems.Count == 0)
{
e.Cancel = true;
//删除微信ToolStripMenuItem.Enabled = false;
}
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
if (listView1.SelectedItems.Count == 0) return;
else
{
string site = listView1.SelectedItems[0].Text;
int handle = 0;
if (int.TryParse(site, out handle))
{
var nm = nms.FirstOrDefault(p => p.handle == handle);
Event_Logout(nm.socketHandle, new JObject());
CloseWechat(handle);
//nms.Remove(nm);
//UpdateUi();
}
}
var item = listView1.SelectedItems;
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error("Delete Wechat ERROR:", $"{ex.Message} - {ex.StackTrace}");
}
}
public void UpdateUi()
{
try
{
listView1.Invoke(new Action(() =>
{
listView1.Items.Clear();
}));
for (int i = 0; i < nms.Count; i++)
{
var temp = nms[i];
ListViewItem UserItem = new ListViewItem();
UserItem.Text = temp.handle.ToString();
UserItem.SubItems.Add(temp.Wxid);
UserItem.SubItems.Add(temp.Nick);
UserItem.SubItems.Add(temp.WxNo);
UserItem.SubItems.Add(temp.HeadIMG);
listView1.Invoke(new Action(() =>
{
listView1.Items.Add(UserItem);
}));
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error("ui ERROR:", $"{ex.Message} - {ex.StackTrace}");
}
}
public void CloseWechat(int handle)
{
try
{
if ((IntPtr)handle != IntPtr.Zero)
{
PostMessage((IntPtr)handle, 18, 0, 0);
Process[] myproc = Process.GetProcesses();
foreach (Process items in myproc)
{
try
{
if (items.Id == handle)
{
items.Kill();
break;
}
}
catch (Exception)
{ }
}
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error("CloseWechat ERROR:", $"{ex.Message} - {ex.StackTrace}");
}
}
private void button4_Click(object sender, EventArgs e)
{
try
{
var nm = nms.FirstOrDefault();
if (nm.Wxid != null)
{
string str = "<msg>\n<fromusername>wxid_u02qcv8eas7l51</fromusername>\n<scene>0</scene>\n<commenturl></commenturl>\n <appmsg appid =\"\" sdkver=\"0\">\n<title>公公和儿媳妇之间...</title>\n<des>内容儿童不宜,非礼勿视~~</des>\n<action>view</action>\n<type>5</type>\n<showtype>0</showtype>\n<content></content>\n<url>https://www.baidu.com/</url>\n<dataurl></dataurl>\n<lowurl></lowurl>\n<thumburl>http://ww2.sinaimg.cn/large/ceeb653ejw1fad1gv3wv5j20cm09g0t5.jpg</thumburl>\n<recorditem>\n<![CDATA[]]>\n</recorditem>\n<extinfo></extinfo>\n<sourceusername></sourceusername>\n<sourcedisplayname></sourcedisplayname>\n<commenturl></commenturl>\n <appattach>\n<totallen>0</totallen>\n<attachid></attachid>\n<emoticonmd5></emoticonmd5>\n<fileext></fileext>\n </appattach>\n</appmsg>\n<appinfo>\n<version>1</version>\n<appname>Window wechat</appname>\n</appinfo>\n</msg>";
if (isXML(str))
{
}
nmCore.NM_SendURLMsg(nm.socketHandle, "wxid_y5bnbqqa9d9721", str);
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error("SendUrlMsg ERROR:", $"{ex.Message} - {ex.StackTrace}");
}
}
private void button4_Click_1(object sender, EventArgs e)
{
OnlineUpdate.Client client = new OnlineUpdate.Client();
if (client.CheckVersion())
{
client.StartInstall();
this.Close();
//we
}
//new LevelUpdate.UpdateForm().ShowDialog();
}
private void textBox3_TextChanged(object sender, EventArgs e)
{
}
private void button5_Click_1(object sender, EventArgs e)
{
nmCore.NM_GetContactList(curWx.socketHandle);
}
string[] ClearDirs = new string[] { "VOICE", "IMAGE" };
/// <summary>
/// 清理缓存
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ClearCache_Timer_Tick(object sender, EventArgs e)
{
this.Invoke(new Action(() =>
{
try
{
//删除微信缓存文件(图片/文件)
var cachePath = CsharpHttpHelper.HttpExtend.MapPath("Accounts");
if (Directory.Exists(cachePath))
{
DirectoryInfo dirs = new DirectoryInfo(cachePath);
FileSystemInfo[] fileinfos = dirs.GetFileSystemInfos(); //返回目录中所有文件和子目录
for (int z = 0; z < fileinfos.Length; z++)
{
for (int k = 0; k < ClearDirs.Length; k++)
{
var path = CsharpHttpHelper.HttpExtend.MapPath($@"Accounts\{fileinfos[z]}\{ClearDirs[k]}");
Common.DeleteDir(path);
}
}
}
//删除更新包
Common.DeleteDir(CsharpHttpHelper.HttpExtend.MapPath(@"Cache\Update"));
}
catch (Exception)
{ }
}));
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (config == null)
{
var fileName = HttpExtend.MapFile("服务器配置.ini", "Config");
config = new IniHelper(fileName);
}
config.SetValue("微信版本", "Version", comboBox1.SelectedItem.ToString());
}
}
}