qq聊天信息的获取与自动发送

trexoven 2007-01-14 08:48:55
为了获取qq聊天信息与自动发送,笔者完成CQQChatWnd类,首先贴出类的内容,然后讲述用法

1.头文件QQChatWnd.h

// QQChatWnd.h: interface for the CQQChatWnd class.
#if !defined(QQCHATWND_H)
#define QQCHATWND_H

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


#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_hChatToolbarWnd;
HWND m_hSendButtonWnd;
HWND m_hModeWnd;
HWND m_hChatRichEditWnd;
};

#endif
...全文
1303 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
glacier3d 2008-12-20
  • 打赏
  • 举报
回复
听起来,这好像是QQ病毒要做的事,呵呵
rollrock1987 2008-12-20
  • 打赏
  • 举报
回复
晕死 7楼 没搞错吧??细细一看 居然2007年的东西 都还顶起来啊 你真是牛了

貌似那个时候 这个方法还可以 不过现在应该不行了
rollrock1987 2008-12-20
  • 打赏
  • 举报
回复
7楼的 太斤斤计较了 这个问题 不是问题 问题是别的能不能实现
raozhenglove 2008-12-20
  • 打赏
  • 举报
回复
我说句啊,如果我没记错的话,一个窗口的句柄值不是固定的,利用固定句柄值搜索窗口不是可行的方法吧
pomelowu 2007-04-04
  • 打赏
  • 举报
回复
呵呵,转一下
wlwlxj 2007-04-04
  • 打赏
  • 举报
回复
vc带得小工具spy
g20044111 2007-04-03
  • 打赏
  • 举报
回复
HWND hwnd = (HWND )0x000B048A ; //qq聊天窗口句柄
-----------------------------------------------------------------------------
问一个问题
qq 聊天窗口句柄值0x000B048A 是如何知道的?
hongbaobao 2007-04-03
  • 打赏
  • 举报
回复
现在的QQ加密了,不知怎么办
trexoven 2007-01-14
  • 打赏
  • 举报
回复
3.类对外接口说明
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 );//改变聊天模式

4.用法

#include "QQChatWnd.h"

HWND hwnd = (HWND )0x000B048A ; //qq聊天窗口句柄
CQQChatWnd qqchatwin ;


qqchatwin.Attatch( hwnd ) ;

char * lpstrText = NULL ; //必须的

qqchatwin.GetChatText( &lpstrText ) ;

delete [] lpstrText ; //数据,否则内存泄露

int nSysMode = qqchatwin.GetSysMode() ;

qqchatwin.ChangeSysMode( P2P_CHAT_MODE ) ;

qqchatwin.SetChatText( "hello, dear ") ;
qqchatwin.AddChatText( "hello, dear ") ;

qqchatwin.Chat() ;

qqchatwin.Detach( hwnd ) ;
trexoven 2007-01-14
  • 打赏
  • 举报
回复
2.实现文件
QQChatWnd.cpp

// QQChatWnd.cpp: implementation of the CQQChatWnd class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MyQQChat.h"
#include "QQChatWnd.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// 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[64] ;

memset( szCaptionName , 0x0 , 64 ) ;
GetWindowText( m_hModeWnd , szCaptionName , 64 ) ;
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[64] ;
memset( szClassName , 0x0 ,64 ) ;

if( hwnd != NULL )
{
GetClassName( hwnd , szClassName , 64 ) ;
if( _stricmp( szClassName , szDefClassName) ==0)
{
GetClassName( GetParent(hwnd) , szClassName ,64 ) ;
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[64] ;
TCHAR szClassName[64] ;
memset( szCaptionName , 0x0 , 64 ) ;
memset( szClassName , 0x0 ,64 ) ;

if( hwnd != NULL )
{
GetClassName( hwnd , szClassName , 64 ) ;
if( _stricmp(szClassName , szDefClassName) ==0)
{
GetWindowText( hwnd , szCaptionName , 64 ) ;
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[64] ;
TCHAR szClassName[64] ;
memset( szCaptionName , 0x0 , 64 ) ;
memset( szClassName , 0x0 ,64 ) ;

if( hwnd != NULL )
{
GetClassName( hwnd , szClassName , 64 ) ;
if( _stricmp(szClassName , szDefClassName) ==0)
{
GetWindowText( hwnd , szCaptionName , 64 ) ;
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 ;
}
项目名称:高仿QQ2013通讯DEMO-10.30更新 版本号:10.30 最新版本 下载内容: (C#)CC2013局域网通讯源码一份, 可引用至工具箱最新版CSkin.dll-10.30版本界面库一份。 界面库更新说明: CC2013-10.30 1.由于SkinForm名字太多人使用,界面库命名正式改为CSkin.dll,官网www.cskin.net。 2.SkinTabControl标签中添加菜单箭头,可点击展开菜单。 3.SkinTabControl添加标签关闭按钮。 4.修复部分中文乱码问题。 5.优化好友列表右键菜单。 6.将窗体自定义系统按钮改为集合模式,可添加无数个自定义系统按钮。自定义系统按钮事件中可以 e.参数 来判断。 7.增加360安全卫士-DEMO案例。 8.增加SkinAnimatorImg控件,用于支持位图动画的播放。如360的动态logo。 9.各种细节BUG优化。 CC2013-10.11 1.添加SkinTabControlEx,加入更加自定义的美化属性和动画效果。 2.添加SkinAnimator,通用动画控件。 3.添加Html编辑器控件 4.修复SkinButton图标和文本相对位置的BUG CC2013-9.26 1.优化好友列表CPU占用 2.好友列表加入好友登录平台属性:安卓 苹果 WEBQQ PC 3.优化标题绘制模式,新添标题绘制模式属性。 4.新添标题偏移度属性。 5.加入圆形进度条控件:ProgressIndicator。 CC2013-9.5.2 1.优化截图控件,截图工具栏加入新功能。 2.解决个人信息卡和天气窗体显示后不会消失的问题。 3.各种细节BUG优化。 CC2013-9.5.1 1.解决贴边左右隐藏的BUG。 2.解决窗体点击事件不能触发的问题。 3.优化SkinButton继承父容器背景色的代码。 4.解决SkinButton异常错误。 CC2013-9.3 1.好友列表右键菜单没反应问题。 2.新增美化控件SkinDatagridview。 3.密码软件盘回删不了文字问题。 4.双击窗体最大化,最大化后再双击恢复原大小,(win7)。 5.部分细节调优。 实现功能: 1.界面库中多达25个自定义换肤控件,让每个控件设设属性就能达到你想要的效果,支持图片换肤和色调绘制。 2.四边阴影,毛边效果,可以设置阴影宽度和阴影颜色,支持所有系统。 3.拥有密码键盘输入,防护更贴心。 4.8种圆角窗体模式供你选择,淋漓尽致,润滑如圆。 5.登录主界面后,有登陆提示窗,提示上次登录的城市和时间。 6.皮肤随心变:拖动任意一张图片至主界面,就可以改变皮肤。 7.皮肤色调获取:改变皮肤的同时,将计算图片色调,再将其运用到窗体背景色。 8.皮肤尾部渐变:上下左右方均可实现,渐变皮肤。 9.皮肤拖拉方向:可以选择皮肤在拉伸的时候,粘着哪一边拖拉。 10.GDI+界面重绘,处理消息机制,3种移动模式和拉伸是否启用只需要设置一个属性的事就可以解决。 11.界面渐变闪现和闪退:不再像平凡的突然出现,采用API渐变机制,渐渐出现和消失,win7系统下还有动态缩小至任务的效果。 12.完美好友列表,可添加上千好友,不卡不掉线,还可以拖动好友到其他分组。 13.好友悬浮至头像可以查看详细资料卡。 14.窗口可调渐变后透明度:让窗体看起来更像是Vista玻璃窗体风格。 15.聊天窗口可发送图片,大文件,表情,还有震动。 16.按钮控件背景色拥有继承窗体背景主色调的功能,让整体色调保持一致。 17.更是有和如出一辙的扣扣截图。仿真度也达到100%,完美修复所有已知BUG。 18.聊天窗口,可以调字体颜色和字体样式等多项功能。 20.SkinLabel与SkinButton控件字体与窗体标题可以根据背景色暗亮度自动调节字体为黑还是白。 21.MessageBox提示框的美化,并继承调用窗口的色调与背景,MessageBox可所谓已达到帅气的不能再帅气的境界了。 22.天气皮肤自动变,所有窗体根据当地天气自动决定皮肤背景,CC最帅气功能之一。 23.个人资料卡及聊天窗体拥有动态CC秀展示。 24.主界面拖动换肤的同时,所关联的子窗体皮肤也会跟着变。 25.多线程大文件传输功能,支持无上限大文件传输,有进度条显示进程度。 26.界面库已封装了大图取主色调,颜色判断暗亮等多项功能。 27.如果你觉得获取天气让你的登录太慢不想要的话,注释相关调用方法即可快速登录。 界面库交流群:306485590 本人QQ:345015918 注意: Demo版不包括更新,为方便用户查看和使用属性等方法,dll只轻微加密。想反编译的就不要尝试了,里面有上百个类,改错改到你哭。 介意购买正版,永久更新配源码。 看截图或者想购买商业版的用户请访问以下地址: http://www.51aspx.com/code/TotalLikeQQ2013 特权:购买商业版的用户,有权利享有最快的更新服务,第一时间将最新版本的dll源码送到你手上。 使本项目源码或本项目生成的DLL前请仔细阅读以下协议内容,如果你同意以下协议才能使用本项目所有的功能,否则如果你违反了以下协议,有可能陷入法律纠纷和赔偿,作者保留追究法律责任的权利。 1、你可以在开发的软件产品中使用和修改本项目的源码和DLL,但是请保留所有相关的版权信息。 2、不能将本项目源码与作者的其他项目整合作为一个单独的软件售卖给他人使用。 3、不能传播本项目的源码和DLL,包括上传到网上、拷贝给他人等方式。 4、以上协议暂时定制,由于还不完善,作者保留以后修改协议的权利。 时间:2013-7-5 作者: 乔克斯 请保留以上版权信息,否则作者将保留追究法律责任。

16,547

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧