?? 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 + -