利用Visual C++ 实现QQ消息群发

转载 2006年06月01日 10:55:00
QQ一直是国内最令人瞩目的及时通讯软件,近6年的经营使其在IM市场有了"世界第一"名号。在国内市场,QQ的市场占有率已经超过了70%,用户群庞大,本人就是腾讯QQ的一个用户。不知QQ会员是否能够消息群发,但我这个免费用户是享受不了这个服务的,给同事和朋友们发通知好辛苦啊。在网上Google了一下,找到几个小软件,可是消息后面又加个广告尾巴。还是自己动手吧:

  如果要分析腾讯QQ协议来编写发送QQ消息是很复杂的一件事情,那么,有没有简单的办法呢?答案是肯定的:有!

  既然Windows使用消息循环来处理输入信息,那么如果我们能够用程序模拟产生"操作QQ时鼠标和键盘操作所发出的消息" ,那么就应该可以实现程序发送QQ消息,进而批量发送QQ消息,即消息群发。

  二、具体实现

  QQ给某个人发送消息时,将创建如下图所示的窗口(对话框窗口),我们发消息就是填写消息内容,然后点击发送。要模拟QQ消息发送,我们就需要填写消息内容,然后模拟按键发送。

  第一步,找到聊天主窗口,该窗口的标题是与*****聊天中,我们可以通过使用FindWindowEx函数来找到这个窗口。

  第二步,找到输入消息的控件并在里面填写消息。注意:可能是腾讯公司为了安全,在窗口里又套了几个窗口,如果有兴趣,可以用微软的工具SPY++自己看看。通过使用SPY++观察,发现该控件是一个RichEdit类,位置如上图所示,我们还是用 FindWindowEx函数来找到它,然后取得指针,通过指针往里面些数据。

  第三步,模拟鼠标点发送按钮的操作,可以通过取得该按钮的指针,然后发送一个BM_CLICK消息就可以了。

  通过程序模拟,实现的非常好。用VC6建立一个简单的对话框程序,添加一个按钮(改Caption值为发送),为该按钮填加以下执行代码:

void CMySMSDlg:: QQSendMessage()
{
 CString str;
 CWnd* pMainWnd = AfxGetMainWnd()->GetWindow(GW_HWNDFIRST);
 while (pMainWnd)
 {
  HWND hWnd,hNext;
  hWnd = pMainWnd->m_hWnd;
  pMainWnd->GetWindowText(str);
  if(str.Find ("聊天")>-1){//找到聊天主窗口Begin
   //找RichEdit
   hWnd=FindWindowEx(pMainWnd->m_hWnd,NULL,"#32770",NULL);
   pMainWnd = CWnd::FromHandle(hWnd);
   hWnd=FindWindowEx(pMainWnd->m_hWnd,NULL,"AfxWnd42",NULL);
   CWnd* pChildWnd=CWnd::FromHandle(hWnd);
   int nLen = str.GetLength ();
   hNext = FindWindowEx(pChildWnd->m_hWnd,NULL,"RICHEDIT",NULL);
   if(hNext){//找到消息填写控件
    CRichEditCtrl* pRich=(CRichEditCtrl*)(CWnd::FromHandle(hNext));
    pRich->GetWindowText (str);
    pRich->SetSel (nLen,nLen);
    pRich->ReplaceSel ("成都外国语学校 黄东");//填上将要发送的内容
   }else return;
   //找消息发送按钮
   hWnd=FindWindowEx(pMainWnd->m_hWnd,NULL,NULL,NULL);
   while (hWnd) {
    pChildWnd=CWnd::FromHandle(hWnd);
    pChildWnd->GetWindowText(str);
    if(str.Find ("发送")>-1){
     pChildWnd->SendMessage (BM_CLICK);//发送
     return;// 退出
    }
    hWnd=FindWindowEx(pMainWnd->m_hWnd,hWnd,NULL,NULL);
   }
   return;
  }//找到聊天主窗口End
  else pMainWnd = pMainWnd->GetWindow(GW_HWNDNEXT); //继续找
 }//While
}

  至此,主要部件已经实现了,如何让程序自动为每个好友打开聊天窗口,和这个也差不了太多,就留给各位去研究吧,这条思路适合目前所有的IM软件。

  程序在VC6下编译通过(文件很小,只有20KB),操作系统为Windows 2000 SP4,QQ版本为2004 SP1,按发送按钮之前需要打开一个聊天窗口。

利用Visual C++ 实现QQ消息群发

一、引言  QQ一直是国内最令人瞩目的及时通讯软件,近6年的经营使其在IM市场有了"世界第一"名号。在国内市场,QQ的市场占有率已经超过了70%,用户群庞大,本人就是腾讯QQ的一个用户。不知QQ会员是...
  • sw283632534
  • sw283632534
  • 2010年03月21日 17:58
  • 995

c#编写QQ群发器源码

1、窗体引用两个timer控件,来控循环发送时间 3D{4vMm X   C'/M/|=Q#   yI.H4Dl  KM}4^Qc   2、调试环境 vs2009.net eH%L?...
  • kevinsung
  • kevinsung
  • 2011年11月01日 22:08
  • 4935

qq聊天机器人 群发工具 (java版) (二)

上一篇介绍了如何借用webqq协议登陆qq,这一篇主要讲下如何实现群发消息。就目前我所知的消息类型有3种,分别是好友消息,群消息以及临时会话消息(这个一般是往群组成员群发)。3种消息分别对应3种方法(...
  • u013401219
  • u013401219
  • 2015年05月31日 19:04
  • 4361

Visual C++ 实现QQ消息群发

摘要 在Windows系统环境中,利用操作系统的消息驱动机制模拟QQ消息发送过程,实现QQ消息群发。  关键字 QQ消息群发 软件模拟 消息循环 SPY++   一、引言  QQ一直是国内最令人瞩目的...
  • onefish
  • onefish
  • 2004年12月29日 12:59
  • 1537

QQ群发/QQ群发器/程序源代码/VS2010/VS2012/VC/MFC

上篇写了QQ登录器。 这次学习豪迪,研究QQ群发器怎么写。 豪迪的群发器是完全模拟鼠标,键盘动作,只是利用了程序提高了效利。 所以他这种方式也是最不容易被鹅厂屏蔽QQ的。 并且这本身也合理,只是利用...
  • laiyangsheng
  • laiyangsheng
  • 2016年09月12日 09:25
  • 1572

手机QQ公众号亿级消息实时群发架构

编者按:高可用架构分享及传播在架构领域具有典型意义的文章,本文由孙子荀分享。转载请注明来自高可用架构公众号 ArchNotes。 孙子荀,2009 年在华为从事内核和分布式系...
  • PAPALIAN
  • PAPALIAN
  • 2015年12月24日 14:37
  • 2690

按键精灵自动发QQ消息

按键精灵介绍 模拟键盘,鼠标 具有录制功能 延时与控制 常用来挂机 代码windows = 6820016 Call Plugin.window.Hide(windows) Delay 2000 Ca...
  • u010598445
  • u010598445
  • 2015年08月26日 13:32
  • 4238

QQ群发消息的笨办法

由于一些原因,我需要群发一次QQ消息。我在网上下载了4个软件,号称是最有名的,结果一个根本发不出去,一个免费版只能发20条,一个后面带着长长的广告尾巴,还有一个我也忘了是啥原因了。总之,没有免费的午餐...
  • unimoon
  • unimoon
  • 2006年09月17日 22:47
  • 2161

C#实现QQ消息发送工具

.Net WinForm程序,实现的QQ消息发送,必须是QQ好友  可用于营销软件,QQ消息群发 软件核心模块,     作者:免开发 出处:http://www.code68.com/  本文...
  • code68
  • code68
  • 2017年09月28日 17:11
  • 529

.Net 版 QQ群发器 附源码

程序仅用于学习交流娱乐使用,不得用于商业用途!由此程序程序带来的一切法律责任与作者无关.QQ: 462012667某天qq聊天有件事想通知下所有朋友,由于好友太多发完直接崩溃,所以决定研究下qq,觉得...
  • huzi86211
  • huzi86211
  • 2011年05月23日 11:39
  • 609
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用Visual C++ 实现QQ消息群发
举报原因:
原因补充:

(最多只允许输入30个字)