qqchatwndsrc

所属分类:ICQ/即时通讯
开发工具:Visual C++
文件大小:1153KB
下载次数:31
上传日期:2007-09-24 11:27:56
上 传 者yubobarye
说明:  经典的QQ聊天源程序代码,有很大的参考价值
(Classic QQ chat source code, has great reference value)

文件列表:
main.cpp (669, 2007-01-16)
qqchatwnd.cpp (7446, 2007-01-16)
qqchatwnd.h (1129, 2007-01-16)
tempd.dsp (4401, 2007-01-16)
tempd.dsw (533, 2007-01-16)
qqchatwndsrc\main.cpp (669, 2007-01-16)
qqchatwndsrc\qqchatwnd.cpp (7446, 2007-01-16)
qqchatwndsrc\qqchatwnd.h (1129, 2007-01-16)
qqchatwndsrc\tempd.dsp (4401, 2007-01-16)
qqchatwndsrc\tempd.dsw (533, 2007-01-16)
qqchatwndsrc\tempd.ncb (33792, 2007-03-23)
qqchatwndsrc\Debug\vc60.idb (132096, 2007-03-23)
qqchatwndsrc\Debug\vc60.pdb (77824, 2007-03-23)
qqchatwndsrc\Debug\main.obj (12488, 2007-03-23)
qqchatwndsrc\Debug\tempd.pch (3550336, 2007-03-23)
qqchatwndsrc\Debug\qqchatwnd.obj (27675, 2007-03-23)
qqchatwndsrc\Debug\tempd.ilk (198744, 2007-03-23)
qqchatwndsrc\Debug\tempd.exe (167989, 2007-03-23)
qqchatwndsrc\Debug\tempd.pdb (353280, 2007-03-23)
qqchatwndsrc\tempd.plg (244, 2007-03-23)
qqchatwndsrc\tempd.opt (53760, 2007-03-23)
qqchatwndsrc\Debug (0, 2007-03-23)
qqchatwndsrc (0, 2007-03-23)

qq聊天信息的获取和设置与自动发送 作者: flytowind 摘要: qq聊天信息的获取和设置与自动发送 关键字: qq聊天 文本框 消息 一、绪言 经常有朋友问我怎样通过程序获取qq聊天信息,笔者完成CQQChatWnd类,首先贴出类的内容,然后讲述用法。 二、CQQChatWnd类对外接口说明 bool Attatch(HWND hChatWnd); //初始化类,把hChatWnd聊天窗口同类连接 bool Detach( HWND hChatWnd);//解除类与hChatWnd的绑定 bool GetChatText(char **lplpstrText/*out*/) ;//获取聊天内容,内容存放在*lplpstrText bool SetChatText( char * lpstrText );//设置聊天内容 bool AddChatText(char *lpstrText);//增加聊天内容 bool Chat( void );//聊天动作,模拟点击发送按钮 int GetSysMode( void );//获取聊天模式 bool ChangeSysMode( int nSysMode );//改变聊天模式 三、用法 #include "QQChatWnd.h" HWND hwnd = (HWND )0x000B048A ; //qq聊天窗口句柄,根据spy++查找 CQQChatWnd qqchatwin ; if( !qqchatwin.Attatch(hwnd) ) return FALSE ; char * lpstrText = NULL ; //必须的 if( !qqchatwin.GetChatText( &lpstrText )) return FALSE ; delete [] lpstrText ; //数据,否则内存泄露 int nSysMode = qqchatwin.GetSysMode() ; qqchatwin.ChangeSysMode( P2P_CHAT_MODE ) ; qqchatwin.SetChatText( "hello, dear ") ; qqchatwin.AddChatText( "hello, dear ") ; qqchatwin.Chat() ; qqchatwin.Detach( hwnd ) ; 四、头文件QQChatWnd.h // QQChatWnd.h: interface for the CQQChatWnd class. #if !defined(QQCHATWND_H) #define QQCHATWND_H #include #define MSG_CHAT_MODE 1 #define P2P_CHAT_MODE 2 class CQQChatWnd { public: bool Chat( void ); bool AddChatText(char *lpstrText); bool SetChatText( char * lpstrText ); bool GetChatText(char **lplpstrText/*out*/) ; bool ChangeSysMode( int nSysMode ); int GetSysMode( void ); bool Detach( HWND hChatWnd); bool Attatch(HWND hChatWnd); public: CQQChatWnd(); virtual ~CQQChatWnd(); private: static BOOL CALLBACK SearchSysModeEnumProc(HWND hwnd, LPARAM lParam); static BOOL CALLBACK SearchSendButtonEnumProc(HWND hwnd, LPARAM lParam); static BOOL CALLBACK SearchRichEditEnumProc( HWND hwnd , LPARAM lParam ); bool GetChatRichEditWnd( HWND *pChatRichEditWnd /*in,out*/); bool GetChatToolbarWnd( HWND *pChatToolbarWnd /*in,out*/); bool GetSendButtonWnd( HWND *pSendButtonWnd /*in,out*/); bool GetModeWnd( HWND *pModeWnd /*in,out*/); int m_nSysMode; HWND m_hChatWnd; HWND m_hSendButtonWnd; HWND m_hModeWnd; HWND m_hChatRichEditWnd; }; #endif 五、实现文件QQChatWnd.cpp // QQChatWnd.cpp: implementation of the CQQChatWnd class. // ////////////////////////////////////////////////////////////////////// #include "QQChatWnd.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CQQChatWnd::CQQChatWnd() { m_nSysMode = 0 ; m_hChatWnd = NULL ; m_hSendButtonWnd = NULL; m_hModeWnd =NULL; m_hChatRichEditWnd =NULL; } CQQChatWnd::~CQQChatWnd() { if( m_hChatWnd!= NULL) Detach( m_hChatWnd ) ; } bool CQQChatWnd::Attatch(HWND hChatWnd) { if( m_hChatWnd!= NULL) Detach( m_hChatWnd ) ; EnumChildWindows( hChatWnd , SearchRichEditEnumProc,(LPARAM)&m_hChatRichEditWnd) ; EnumChildWindows( hChatWnd , SearchSysModeEnumProc ,(LPARAM)&m_hModeWnd) ; EnumChildWindows( hChatWnd , SearchSendButtonEnumProc ,(LPARAM)&m_hSendButtonWnd) ; TCHAR szDefCaptionName01[]="消息模式(&T)" ; TCHAR szDefCaptionName02[]="聊天模式(&T)" ; TCHAR szCaptionName[***] ; memset( szCaptionName , 0x0 , *** ) ; GetWindowText( m_hModeWnd , szCaptionName , *** ) ; if( _stricmp(szCaptionName, szDefCaptionName01 ) ==0) { m_nSysMode =MSG_CHAT_MODE ; } if( _stricmp(szCaptionName, szDefCaptionName02 ) ==0) { m_nSysMode =P2P_CHAT_MODE ; } return TRUE ; } bool CQQChatWnd::Detach(HWND hChatWnd) { m_nSysMode = 0 ; m_hChatWnd = NULL ; m_hSendButtonWnd = NULL; m_hModeWnd =NULL; m_hChatRichEditWnd =NULL; return TRUE ; } bool CQQChatWnd::GetChatRichEditWnd(HWND *pChatRichEditWnd) { if( m_hChatRichEditWnd!=NULL && IsWindow( m_hChatRichEditWnd ) ) { *pChatRichEditWnd = m_hChatRichEditWnd ; return TRUE ; } return FALSE ; } int CQQChatWnd::GetSysMode() { return m_nSysMode ; } bool CQQChatWnd::GetModeWnd(HWND *pModeWnd) { if( m_hModeWnd!=NULL && IsWindow( m_hModeWnd ) ) { *pModeWnd = m_hModeWnd ; return TRUE ; } return FALSE ; } bool CQQChatWnd::ChangeSysMode(int nSysMode) { if( (nSysMode!= MSG_CHAT_MODE) && (nSysMode != P2P_CHAT_MODE) ) return FALSE ; if( nSysMode != m_nSysMode && m_hModeWnd!=NULL && IsWindow(m_hModeWnd) ) { SendMessage( m_hModeWnd , WM_LBUTTONDOWN , NULL ,NULL ) ; SendMessage( m_hModeWnd , WM_LBUTTONUP , NULL ,NULL ) ; m_nSysMode = nSysMode ; } return TRUE ; } bool CQQChatWnd::GetSendButtonWnd(HWND *pSendButtonWnd) { if( m_hSendButtonWnd!=NULL && IsWindow( m_hSendButtonWnd ) ) { *pSendButtonWnd = m_hSendButtonWnd ; return TRUE ; } return FALSE ; } bool CQQChatWnd::GetChatText(char **lplpstrText/*out*/) { if(*lplpstrText!=NULL) return FALSE ; HWND hRichEditWnd =NULL ; if( GetChatRichEditWnd(&hRichEditWnd)) { SendMessage( hRichEditWnd , EM_SETSEL , 0 ,-1 ) ; Sleep(100) ; PostMessage( hRichEditWnd ,WM_COMMAND , 0XE122 , 0 ) ; if (!IsClipboardFormatAvailable(CF_TEXT)) return FALSE; if (!OpenClipboard(NULL)) return FALSE; HGLOBAL hglb = GetClipboardData(CF_TEXT); if (hglb != NULL) { LPTSTR lptstr = (char *)GlobalLock(hglb); if (lptstr != NULL) { *lplpstrText = new char[strlen(lptstr)+1] ; strcpy( *lplpstrText , lptstr ) ; (*lplpstrText)[strlen(lptstr)] = '\0' ; GlobalUnlock(hglb); CloseClipboard(); return TRUE ; } } CloseClipboard(); return FALSE ; } return FALSE ; } bool CQQChatWnd::SetChatText(char *lpstrText) { HWND hRichEditWnd =NULL ; if( GetChatRichEditWnd(&hRichEditWnd)) { SendMessage( hRichEditWnd , EM_SETSEL , 0 ,-1 ) ; Sleep(100) ; SendMessage( hRichEditWnd , WM_CLEAR , 0 , 0 ) ; HGLOBAL hMem; LPTSTR pStr =NULL; // 分配内存空间 hMem = GlobalAlloc(GHND | GMEM_SHARE, strlen(lpstrText)+1); if( hMem!=NULL ) { pStr = (char *)GlobalLock(hMem); if( pStr!=NULL ) { strcpy(pStr, lpstrText); } GlobalUnlock(hMem); BOOL bRet = OpenClipboard(NULL); if( bRet ) { EmptyClipboard(); // 设置剪贴板文本 SetClipboardData(CF_TEXT, hMem); CloseClipboard(); Sleep(100) ; PostMessage( hRichEditWnd ,WM_COMMAND , 0XE125 , 0 ) ; return TRUE ; } // 释放内存空间 GlobalFree(hMem); } } return FALSE ; } bool CQQChatWnd::AddChatText(char *lpstrText) { char * lpOldText =NULL ; if( GetChatText( &lpOldText ) ) { char *lpNewText = new char[strlen(lpOldText)+strlen(lpstrText)+1] ; strcpy( lpNewText , lpOldText ) ; strcat( lpNewText , lpstrText ) ; SetChatText( lpNewText ) ; delete [] lpOldText ; delete [] lpNewText ; return TRUE ; } return FALSE ; } bool CQQChatWnd::Chat() { HWND hSendButton = NULL ; if( GetSendButtonWnd(&hSendButton)) { SendMessage( hSendButton , WM_LBUTTONDOWN , NULL ,NULL ) ; Sleep(100) ; SendMessage( hSendButton , WM_LBUTTONUP , NULL ,NULL ) ; return TRUE ; } return FALSE ; } BOOL CQQChatWnd::SearchRichEditEnumProc(HWND hwnd, LPARAM lParam) { //返回值,没有找到的时候继续查找 BOOL fRet = TRUE ; //要寻找的控件的类名 TCHAR szDefClassName[]="richedit"; TCHAR szAfxClassName[]="afxwnd42" ; TCHAR szClassName[***] ; memset( szClassName , 0x0 ,*** ) ; if( hwnd != NULL ) { GetClassName( hwnd , szClassName , *** ) ; if( _stricmp( szClassName , szDefClassName) ==0) { GetClassName( GetParent(hwnd) , szClassName ,*** ) ; if( _stricmp(szClassName , szAfxClassName) ==0) { *(HWND *)lParam = hwnd ; fRet = FALSE ; } } // end if strcmp ... }// end if hwnd != NULL return fRet ; } BOOL CQQChatWnd::SearchSendButtonEnumProc(HWND hwnd, LPARAM lParam) { //返回值,没有找到的时候继续查找 BOOL fRet = TRUE ; //要寻找的控件的类名 TCHAR szDefClassName[]="Button"; TCHAR szDefCaptionName[]="发送(&S)" ; TCHAR szCaptionName[***] ; TCHAR szClassName[***] ; memset( szCaptionName , 0x0 , *** ) ; memset( szClassName , 0x0 ,*** ) ; if( hwnd != NULL ) { GetClassName( hwnd , szClassName , *** ) ; if( _stricmp(szClassName , szDefClassName) ==0) { GetWindowText( hwnd , szCaptionName , *** ) ; if( _stricmp(szCaptionName, szDefCaptionName ) ==0) { *(HWND *)lParam = hwnd ; fRet = FALSE ; } } // end if strcmp ... }// end if hwnd != NULL return fRet ; } BOOL CQQChatWnd::SearchSysModeEnumProc(HWND hwnd, LPARAM lParam) { //返回值,没有找到的时候继续查找 BOOL fRet = TRUE ; //要寻找的控件的类名 TCHAR szDefClassName[]="Button"; TCHAR szDefCaptionName01[]="消息模式(&T)" ; TCHAR szDefCaptionName02[]="聊天模式(&T)" ; TCHAR szCaptionName[***] ; TCHAR szClassName[***] ; memset( szCaptionName , 0x0 , *** ) ; memset( szClassName , 0x0 ,*** ) ; if( hwnd != NULL ) { GetClassName( hwnd , szClassName , *** ) ; if( _stricmp(szClassName , szDefClassName) ==0) { GetWindowText( hwnd , szCaptionName , *** ) ; if( _stricmp(szCaptionName, szDefCaptionName01 ) ==0) { *(HWND *)lParam = hwnd ; fRet = FALSE ; } if( _stricmp(szCaptionName, szDefCaptionName02 ) ==0) { *(HWND *)lParam = hwnd ; fRet = FALSE ; } } // end if strcmp ... }// end if hwnd != NULL return fRet ; } 六.有任何问题,疑问,欢迎来信咨询 trexoven@163.com

近期下载者

相关文件


收藏者