using Chat.Framework.WXSdk.Implement; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Chat.Framework.WXSdk.UIForm { public partial class HOOKForm : Form { public HOOKForm(WXClientImpl_HOOK hook) { InitializeComponent(); this.hook = hook; this.Text = "MyWeChat"+hook.Process.Id; } WXClientImpl_HOOK hook; public struct COPYDATASTRUCT { public IntPtr dwData; public int cbData; [MarshalAs(UnmanagedType.LPStr),] public string lpData; } public enum MsgType:int { 获得二维码 = 5, 登录窗口句柄改变 = 10001, 聊天窗口句柄改变 = 10002, 机器人信息刷新 = 10003, 好友列表数据刷新 = 10004, 错误信息 = 10005, 群列表数据刷新 = 10006, 选中了微信窗口 = 10007, 查询申请人列表 = 10008, 收到私聊消息 = 10011, 收到群聊消息 = 10012, 发送了一条消息 = 10014, 未知消息 } /// 消息主要接受程序 /// /// protected override void DefWndProc(ref Message m) { switch (m.Msg) { case 74: //74代表WM_COPYDATA // //消息号 (int)m.WParam var msg = (int)m.WParam; MsgType f = (MsgType)(msg); COPYDATASTRUCT cds = new COPYDATASTRUCT(); Type t = cds.GetType(); try { cds = (COPYDATASTRUCT)m.GetLParam(t); } catch (Exception) { } Console.WriteLine($"{f}:{cds.lpData}"); switch (f) { case MsgType.获得二维码: { var temp = cds.lpData.Split(new string[] { "||"}, StringSplitOptions.None); if (temp.Length > 1 && File.Exists(temp[1])) { File.Delete(temp[1]); } break; } case MsgType.登录窗口句柄改变: case MsgType.聊天窗口句柄改变: hook.WxHandel = int.Parse(cds.lpData); break; case MsgType.机器人信息刷新: { var temp = cds.lpData.Split(new string[] { "||"}, StringSplitOptions.None); //机器人信息刷新:省钱管家-喵喵||sqgj121||wxid_zia3qen528cf22||http://wx.qlogo.cn/mmhead/ver_1/ibb1ZKLYa6cr5ibEademibNN1AjAu3JT9K3z3uERYXGx3VdWicsThtbBJB7mibRS3Ihk7GqFKXl1KfkNicXjlicmdqAIky2zpsmt7U143hicaxzR6TY/0 hook.User = new WeixinBaseUser(temp[2],temp[0]); } break; case MsgType.好友列表数据刷新: { } break; case MsgType.错误信息: break; case MsgType.群列表数据刷新: break; case MsgType.选中了微信窗口: break; case MsgType.查询申请人列表: break; case MsgType.收到私聊消息: break; case MsgType.收到群聊消息: break; case MsgType.发送了一条消息: break; case MsgType.未知消息: break; default: break; } //消息内容 cds.lpData break; default: base.DefWndProc(ref m); break; } } } }