获得qq的聊天内容

Posted on 2005-12-28 20:23  flourish  阅读(1759)  评论(0)    收藏  举报

获得qq的聊天内容

这种方式也可用于其它聊天工具

使用spy++看QQ2003的聊天窗口,采用一名为RichEdit20A来存放qq的聊天内容.
只要找到聊天窗口的句柄,然后找到RichEdit20A的句柄,就可以发消息将内容
放到剪贴板中,然后就可以从剪贴板中取出我们感兴趣的内容.

主要函数:
//枚举所有运行的窗口,将该窗口的句柄传给自己定义的函数EnumWindowsProc
EnumWindows(EnumWindowsProc,0);
//找到qq的聊天的窗口
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
   TCHAR buff[1000];
int buffsize(100),nPosition(-1);
HWND hQQWnd=NULL;
  ::GetWindowText(hwnd,buff,buffsize);
if (strlen(buff)<1)
 return TRUE;
CString str(buff);
  nPosition=str.Find(_T("聊天"));
if(nPosition!=-1)
EnumChildWindows(hwnd,ChildWndProc,0);
return TRUE;
}


//枚举qq聊天的窗口的所有子窗口,找到类名为RichEdit20A的子窗口
//将内容get出来,放到全局变量strEdit中
BOOL CALLBACK ChildWndProc(HWND hwnd, LPARAM lParam)
{

LPTSTR  lptstr;
HGLOBAL  hglb=NULL;
char className[CLASS_SIZE];
  if (GetClassName(hwnd,className,CLASS_SIZE)==0)
 return TRUE;
  CString str(className);
if(str==_T("RichEdit20A"))
{
 ::SendMessage(hwnd,EM_SETSEL,0,-1);
 ::SendMessage(hwnd,WM_COPY,0,0);
 ::SendMessage(hwnd,EM_SETSEL,-1,0);
    if (! ::OpenClipboard(NULL))
  return TRUE;
 if (!IsClipboardFormatAvailable(CF_TEXT))
  return TRUE;
    hglb = GetClipboardData(CF_TEXT);
 if (hglb != NULL)
 {
  lptstr = (LPTSTR)GlobalLock(hglb);
  GlobalUnlock(hglb);
  EmptyClipboard();
  CloseClipboard();
   strEdit=lptstr;
     return TRUE;
 }
}
return TRUE;
}
摘自:http://www.vctop.com/View.asp?ID=473&CateID=1

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3