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
近期下载者:
相关文件:
收藏者: