📄 common.h
字号:
#ifndef NO_OPEN_QQ_COMMON
#define NO_OPEN_QQ_COMMON
#ifndef _Ken_Win32_CKWnd_
class DECLSPEC_NOVTABLE CKWnd{
public:
HWND m_hWnd;
};
#endif
#define WM_QQ_SOCKET (WM_USER+1)
class DECLSPEC_NOVTABLE CQQSocketBase{
public:
virtual void Delete()=0;
virtual int Recv(LPVOID lpBuf,int iSize)=0;
virtual int RecvFrom(LPVOID lpBuf,int iSize,DWORD &ServerIP,WORD &ServerPort)=0;
virtual int Send(LPCVOID lpBuf,int iSize)=0;
virtual int SendTo(LPCVOID lpBuf,int iSize)=0;
virtual BOOL IsValid() const=0;
virtual void Close(BOOL IsSendRecv=FALSE)=0;
virtual BOOL Connect(DWORD ServerIP,WORD ServerPort)=0;
virtual BOOL ReConnect(DWORD ServerIP,WORD ServerPort)=0;
virtual BOOL Bind(DWORD saddr=INADDR_ANY,WORD localport=0)=0;
virtual BOOL SetEventHandle(HWND hWnd,DWORD Msg=WM_QQ_SOCKET,long lEvent=FD_READ)=0;
SOCKET m_Socket;
BOOL m_IsTCP;
DWORD m_ServerIP;
WORD m_ServerPort;
};
struct TQQPacketRecvHead{
BYTE m_Header_Tag;
WORD m_Source_Tag;
WORD m_Cmd;
WORD m_Seq;
DWORD m_ServerIP;
WORD m_ServerPort;
};
struct TRecvIMHead{
DWORD m_FromID;
DWORD m_MyID;
DWORD m_ServerIP;
WORD m_ServerPort;
WORD m_Result;
};
struct TQQDataBase{
DWORD m_QQ;
BYTE m_Password[16];//二次MD5后的密码
BYTE m_Status;//在线状态
BOOL m_UseTM;//是否使用TM登陆
BOOL m_HasVideo;//视频
};
class CQQGuiWndBase;
class CQQPacketBase;
class CQQConfigBase;
struct TQQClientDataEx;
class DECLSPEC_NOVTABLE CQQClientBase : public TQQDataBase{
public:
virtual void Delete()=0;
virtual void SetLoginPassword(LPCSTR lpPassword)=0;
virtual void Login()=0;
virtual void Logout()=0;
virtual void KeepAlive()=0;
virtual void ChangeStatus()=0;
virtual CQQPacketBase *GetSendIMMsgPacket(DWORD TOID,LPCSTR lpMsg,LPCSTR lpFont,DWORD FontColor,BYTE FontFlag/*=9*/,BYTE replyType/*=QQ_IM_NORMAL_REPLY*/,WORD HeadIcon=0)=0;
virtual void PushPacket(CQQPacketBase *lpQQPacket)=0;
virtual CQQPacketBase *PopPacket()=0;
virtual BOOL TransportPacket()=0;
virtual TQQClientDataEx *ReAllocDataEx(int iSize)=0;
void (*m_lpOnEvent)(CQQClientBase *This,DWORD Event,WPARAM wParam,LPARAM lParam);
void (*m_lpOnRecvData)(CQQClientBase *This);
BOOL (*m_lpOnRecvCmd)(CQQClientBase *This,TQQPacketRecvHead *lpRecvHead,CQQPacketBase *lpRecvPacket);
void (*m_lpOnRecvIM1)(CQQClientBase *This,CQQPacketBase *lpRecvPacket);
void (*m_lpOnRecvIM2)(CQQClientBase *This,CQQPacketBase *lpRecvPacket,TRecvIMHead *lpRecvIMHead);
CQQSocketBase *m_lpSocket;
WORD m_Ver;
BYTE m_KeyData[16];
BYTE *m_Token;//登录令牌
BYTE m_TokenLen;//登录令牌长度
WORD m_Seq;
BOOL m_IsLogin;
BOOL m_IsBeginLogin;
DWORD m_KeepAliveFail;
BYTE m_LastStatus;
CQQGuiWndBase *m_lpGuiWndBase;
TQQClientDataEx *m_lpClientDataEx;
};
class DECLSPEC_NOVTABLE CQQPacketBase{
public:
virtual void Delete()=0;
virtual void Reset()=0;
virtual BYTE *GetBuffer()=0;
virtual BYTE *GetCurrentBuffer()=0;
virtual DWORD MaxSize()=0;
virtual DWORD Size()=0;
virtual BYTE Read_Byte()=0;
virtual WORD Read_Word()=0;
virtual DWORD Read_DWord()=0;
virtual void Read_Data(LPVOID lpBuffer,int size)=0;
virtual void Skip(DWORD size)=0;
virtual void Write_Byte(BYTE Val)=0;
virtual void Write_Word(WORD Val)=0;
virtual void Write_DWord(DWORD Val)=0;
virtual void Write_Data(LPCVOID lpBuffer,int size)=0;
////////////////////////////////////////////////////////////////////////////////
//virtual void CreateHead(WORD Ver,DWORD qqid,WORD Cmd,WORD &seq)=0;
virtual void CreateHead(CQQClientBase *lpQQClient,WORD Cmd)=0;
virtual void WriteTail()=0;
virtual void MakeCmdPacket(CQQClientBase *lpQQClient,WORD Cmd,LPCVOID lpBody,DWORD size)=0;
virtual void Encrypt(LPCVOID lpBody,DWORD size,BYTE *keydata)=0;
virtual void Encrypt(CQQPacketBase *lpBody,BYTE *keydata)=0;
virtual void SetSeq(WORD Seq)=0;
////////////////////////////////////////////////////////////////////////////////
virtual BOOL Decrypt(CQQPacketBase *lpRecvPacket,BYTE *keydata)=0;
////////////////////////////////////////////////////////////////////////////////
virtual BOOL RecvFrom(CQQSocketBase *lpSocketBase,TQQPacketRecvHead *lpRecvHead)=0;
virtual int SendTo(CQQSocketBase *lpSocketBase)=0;
////////////////////////////////////////////////////////////////////////////////
int m_iSize;//有可能是接受的数据包大小,也有可能是编码后大小
};
typedef BOOL (*LPEnumQQClientFun)(CQQClientBase *lpQQClientBase,va_list argptr);
//va_arg(argptr,int);
class DECLSPEC_NOVTABLE CQQGuiWndBase{
public:
virtual void Delete()=0;
virtual CKWnd *GetWnd()=0;
virtual void AddQQClient(CQQClientBase *lpQQClientBase)=0; //CQQClient 内部自动添加
virtual void RemoveQQClient(CQQClientBase *lpQQClientBase)=0; //CQQClient 内部自动删除
virtual BOOL EnumQQClient(LPEnumQQClientFun lpFun,...)=0;
virtual void OnQQClientPushPacket()=0;
BOOL (*m_lpOnHookMsg)(CQQGuiWndBase *This,UINT Msg,WPARAM wParam,LPARAM lParam,LRESULT &RetV);//返回TRUE则不引用默认消息
CQQConfigBase *m_lpQQConfigBase;
};
class DECLSPEC_NOVTABLE CQQConfigBase{
public:
virtual void Delete()=0;
virtual void LoadConfig()=0;
virtual void SaveConfig()=0;
virtual void AddQQGuiWnd(CQQGuiWndBase *lpQQGuiWndBase)=0; //CQQClient 内部自动添加
virtual void RemoveQQGuiWnd(CQQGuiWndBase *lpQQGuiWndBase)=0; //CQQClient 内部自动删除
void (*m_lpOnSaveQQClient)(CQQClientBase *lpQQClientBase,IXMLDOMElement *lpElement);
void (*m_lpOnLoadQQClient)(CQQClientBase *lpQQClientBase,IXMLDOMElement *lpElement);
void (*m_lpOnLoadAddQQClient)(CQQConfigBase *This,IXMLDOMElement *lpElement);//在自己写GUI时必需重写,否则不能加载
void (*m_lpOnLoadCommon)(CQQConfigBase *This,IXMLDOMElement *lpElement);//读取全局配置
void (*m_lpOnSaveCommon)(CQQConfigBase *This,IXMLDOMElement *lpElement);//写入全局配置
void (*m_lpOnChangeConfig)(CQQConfigBase *This);//如果在修改任何一个数据时都保存请重写,建议不要重写
};
/*
QQStartGui{ [主程序入口 - 插件]
|CQQConfigBase ->由 QQStartGui 创建
|CQQGuiWndBase ->自动添加到 CQQConfigBase
|CQQClientBase ->自动添加到 CQQGuiWndBase
|CQQSocketBase ->由 CQQClientBase 创建
|CQQPacketBase ->由 CQQClientBase 或其它创建,由 CQQSocketBase 发送
}QQEndGui [不一定会引用,任何接口引用,由 QQStartGui 控制程序退出]
*/
#define MicroQQ_VER (0x0000001B)
struct TQQPlugin{
DWORD dwPluginSize; //本结构大小
union{
DWORD MicroQQVer; //注意:此版本号不要修改
struct{
WORD MicroQQ_MinorVer,MicroQQ_MajorVer;
//如果 MicroQQ_MajorVer 变化,表明插件需要更新
};
};
BOOL IsNT; //是否WINNT
HINSTANCE hInst; //主程序句柄
HICON hIcon;
void (*lpQQStartGui)();
void (*lpQQEndGui)();
CQQPacketBase *(*lpNewQQPacket)(); //注意:此接口不可重写
CQQSocketBase *(*lpNewQQSocket)();
CQQClientBase *(*lpNewQQClient)(CQQGuiWndBase *lpGuiWndBase);
CQQGuiWndBase *(*lpNewQQGuiWnd)(CQQConfigBase *lpQQConfigBase);
CQQConfigBase *(*lpNewQQConfig)();
};
//extern "C" LPSTR OnInitQQPlugin(TQQPlugin *lpQQPlugin);
typedef LPSTR (*LPOnInitQQPlugin)(TQQPlugin *lpQQPlugin);
extern TQQPlugin m_QQPlugin;
extern TQQPlugin *m_lpQQPlugin;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -