蜈蚣

百足之虫,死而不僵
posts - 19, comments - 427, trackbacks - 7, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

QQ机器人

Posted on 2007-01-03 11:24 蜈蚣 阅读(16614) 评论(69) 编辑 收藏
   这个元旦假期过的比较奇怪,为了向远方的GF表示忠诚。除了1号和同学吃了个大锅饭之外,尽量做到了大门不出二门不迈,躲在闺房守岁:)。
     在家闲着也不能干闲着,总得做点事情,想起前段时间一个师兄交代给我的任务:把若干个qq群串在一起。X国的政策一向比较Bt,你说开个群还要限制人数。H大在深圳有几千校友,一个群怎么可能放的下那么多人。好多在tx工作的师兄,明确告诉:我买通tx的人是不大可能了,搞一个传话筒才是解决之道。
       事情虽小,但也着实麻烦。你说要去分析QQ具体数据包,万一哪天tx一高兴把数据给改了,或者接口开放了,也够我郁闷一壶的了。那就找个最简单的办法吧,左一顿baidu,又一顿google. “QQ接口”搜出来的结果绝大多数是关于tx qq的http接口,既然大家那么推崇,那我就从Http接口下手,于是把我以前写的AJAX给拆了,在把所谓的qq接口研究成果给鼓捣在一起,然后去webqq(http://webqq.qq.com)上大抢一遍,那家伙,天昏地暗,相当的&(&(。
      代码我是用script写的:
                  
异步AJAX会话类

//QQ会话类

     我在那用天真的眼神,盼望着能从这个地方掏出点东西来。可偏偏我这个比较倒霉的孩子,碰到了极其复杂的网络问题(家穷人丑,只好用手机上网,速度回到上世纪90年代),掏了半天啥也没弄到,返回的尽是12152错误。
     去翻MSDN时,遇到几个头疼的单词(鄙人英语着实差劲,单词量屈指可数),很习惯的就去开金山词霸。等等,金山词霸能把别的窗口的信息给拽出来,为什么我就不能。于是我就抛弃了前面的工作,从QQ对话窗口下手。nndx,偶就不信了,偶还灭不了你。
  说干就干,那就先勾吧,.net好象是干不了这事,但是winapi还是能干这活的。win32编程嘛,不就几个消息循环(—(—……*(—
  
WinApi调用
QQ钩子


东西到手了,传话筒的工作基本上算是完成了,接下来就让它显示出来:
 1    /// <summary>
 2        /// 时钟事件
 3        /// </summary>
 4        /// <param name="sender"></param>
 5        /// <param name="e"></param>

 6        private void tmGetMsg_Tick(object sender, System.EventArgs e)
 7        {
 8            //群1里的消息
 9            string strMsg = QQHooks.GetMsg(txtGroupWinName1.Text);        
10            string str = "";
11            
12            if(!string.Empty.Equals(strMsg))
13            {
14                ArrayList msgList = ParseMsg.Parse(strMsg);
15
16                foreach(QQMsg msg in msgList)
17                {
18                    if("253822559" == msg.Number.ToString())continue;
19                    
20                    if(string.Empty.Equals(msg.Msg.Trim()))
21                        str =  string.Format("{0}在群1里做了个表情\r\n",msg.Name,msg.Msg);
22                    else
23                         str =  string.Format("{0}在群1里说:\r\n{1}\r\n",msg.Name,msg.Msg);
24                    
25                    lbGroupMsgList1.Items.Add(str);
26                    //save msg 
27                    
28                    //发送消息
29                    QQHooks.SendMsg(txtGroupWinName2.Text,str);
30                    QQHooks.SendMsg(txtGroupWinName3.Text,str);
31                    
32                }
                
33            }

34  }

这里的txtGroupWinName1是让输入qq窗口标题。以前用asm32做程序的时候就觉的微软够BT的,要是每个窗口编译的时候就给限制个GUID多好—()—*)((—
至此大功算是告成了,完美交差。拿着这东东,改天狠狠的宰我师兄几顿.

(07-01-04)续:
要的人太多了,我还是主动把东西传上来吧,要不然有骗 email地址之嫌
源代码和相关资料下载:/Files/sukyboor/Q.rar

附,说明:先介绍一下http方法:
 1,qq接口.txt
   是我在网络上找的一篇“C#编写QQ接口软件--QQ协议篇” 里面有QQhttp协议访问的详细的介绍,协议标准是v1.1。但是经过我是没调通,好象是http://tqq.tencent.com:8000被封了,你有没有好的运气我就不知道了。tx的webqq用的端口是http://webqq-proxy.qq.com:8080/这个就是慢点,用还是能用的。
 2,Maxthon_Appin 文件夹下面有2个文件QQTest.txt ,GetQQSession.txt。maxthon有个简易收集面板你可以动态的去调试脚本.用maxthon打开http://webqq.qq.com后装入qqtest.txt你会发现访问过程的一举一动都在你的监视之中。Log.txt就是这么来的。GetQQSession.txt操作同上,用于获取一个新的sessionid
 3,log.txt是监视http://webqq.qq.com的访问过程后得来的.你可以参考qq接口.txt看。不过tx的webqq用的是v1.0的接口,但大体上是相似的,相信聪明的你是可以看懂的。
  4,webqq文件夹下放着http://webqq.qq.com被我下到本地的页面。有兴趣的可以去看看里面的脚本,尤其是js\web_cmd.js虽然写的比我还烂,但还是值得一看。
 5,WQQ文件夹下放着我写的测试页面。不过我家的破电脑调不通。如果你运气好的话,在这个基础上继续干吧。不过别忘记了,到时候把做好的东西发给我一份(sukyboor·163.com)。
好了,下面说说钩子方法
  项目在TQQ文件夹下面,注释写的挺详细的,自己看吧。
就提醒4点,
 1 是app.config里面的qqnum一定要配置成你的qq号,否则你就等着别人骂你sx吧。
 2 主窗口上的几个输入框一定要配置成群聊窗口的标题,否则它啥也干不了
3 别告诉我你还用qq2005
 4 消息被转发以后在窗口里是看不到的,得点聊天记录按纽以后才能看的见
 
license.txt
  里面堆的是一堆套话,有空就瞅2眼.

百足之虫,死而不僵

Feedback

#1楼[楼主]  回复 引用 查看   

2007-01-03 11:28 by 笨小苏      
第一种办法不是不能用,可能是我网络的问题。
我这里收了很多资料,有兴趣的朋友可以下下去看
代码写的不是一般的烂,砖头的不要

#2楼  回复 引用   

2007-01-03 11:40 by CCC[匿名][未注册用户]
hj821111@gmail.com
谢谢..

#3楼  回复 引用   

2007-01-03 11:59 by Double[未注册用户]
DoublePSD@sohu.com
谢谢

#4楼  回复 引用   

2007-01-03 12:24 by yoshow[匿名][未注册用户]
ruanyu83@gmail.com

3Q

#5楼  回复 引用   

2007-01-03 12:30 by wu[未注册用户]
classweb #126.com,谢谢.

#6楼  回复 引用   

2007-01-03 12:30 by sunlife[匿名]
dohu1234@21cn.com

#7楼  回复 引用   

2007-01-03 12:51 by haaron[匿名][未注册用户]
haaron.john@gmail.com 谢谢

#8楼  回复 引用 查看   

2007-01-03 12:56 by scotoma      
scotoma@163.com

看上去不错也想要一份谢谢了....

#9楼  回复 引用   

2007-01-03 13:04 by j[匿名][未注册用户]
为什么有现成的不用。
PYTHON社区早有人写过QQ桥,以前我们就用他,几个群的消息共通。使用SVN下载。要PYTHON相关环境
Trac:http://trac.easiest.cn/cgi-bin/trac.cgi
svn:http://www.easiest.cn/svn/Python-QQ
缺省用户名和密码为Python-QQ
缺省用户名和密码只有读的权利,无写入权利。

引:

2006-12-19 公司三个站点整和到一起了,开通了论坛,大家可以到bbs.easiest.cn提出问题.

2006-7-22 修改数据包为2006,并修改了根登陆服务器地址。能正常login和list还有发送接收消息了.

2005-10-9 桥接了四个群,测试中。

2005-10-9 增加了对群消息的处理,将Python-QQ-bri做了两个群的桥接。

2005-09-26 将tea算法部分的中文注释提交上来了。

2005-09-10 能发送消息了,不过不稳定。

2005-09-09 增加了qqlib的部分注释。对qqlib的处理方法做了小调整。

2005-09-09 修改了GUI部分,能得到好友列表了,但是发送消息未完成。

2005-09-09 修改了GUI部分,能够正常登陆了。

2005-09-08 增加了对发送消息不成功的判断,但是未自动重发。

2005-08-11 增加了qq.login属性,为1时登陆成功。

2005-08-01 修改了消息处理方式,目前只处理了好友消息和陌生人消息。修正了改变当前状态的一处错误。

2005-07-30 按照limodou和其他朋友的提意,将编码改变为UTF-8,并通过os模块本程序自动在win和*uix下切换编码。将qqlib独立处理,分别进行控制台和图形界面的分工工作。hhgs.efhilt@gmail.com朋友提供了一个gui的程序,但是没有调试通过。将输入密码的地方使用了getpass模块。加上了登陆成功的提示。

2005-07-29 yxxyun@gmail.com朋友的提醒下,发现了一个命令定义错误。更改过来。

2005-07-28 因为朋友们反映在linux下不能使用,于是进行测试,发现2.3不支持某种方法的字典操作,更改update方法后,在FreeBSD 5.3下运行成功。

2005-07-27 释放出第一个版本,环境支持需要Python 2.4 以及twisted 2.01。目前实现的功能有:登陆、发送活动包、列好友、列在线好友、发送消息、接受好友消息、退出登陆。

#10楼  回复 引用   

2007-01-03 13:09 by Ap0ll0[未注册用户]
zytp at 163.com

#11楼  回复 引用   

2007-01-03 13:18 by Dicky[未注册用户]
帅哥有完整代码下载吗?谢谢!

#12楼[楼主]  回复 引用 查看   

2007-01-03 13:33 by 笨小苏      
@j[匿名]
不为什么,就因为没有google到它,咋地吧,哈哈哈哈
看来又做了个重复的轮子
不过既然是打发时间,也就无所谓了

我一开始考虑用javascript写的时候考虑过用LumaQQ源代码
就是嫌烦琐,另外java使用水平也不高
放着c++不用,用c#就是考虑到做后面消息解析的时候,用正则表达式方便一些

#13楼  回复 引用 查看   

2007-01-03 13:54 by 叶漂      
sifang2004@yahoo.com.cn

哥们,把资料发给我吧,谢谢,谢谢啦!

#14楼  回复 引用   

2007-01-03 14:03 by haizi[未注册用户]
haizi010@163.com
谢谢了

#15楼  回复 引用   

2007-01-03 14:17 by Aqing[未注册用户]
aqing50@eyou.com
谢谢

#16楼  回复 引用   

2007-01-03 18:00 by test[匿名][未注册用户]
firedlove@163.com
Thanks

#17楼  回复 引用   

2007-01-03 20:05 by flar[匿名][未注册用户]
我也要一份,谢谢!
new_flar@163.com

#18楼  回复 引用   

2007-01-03 22:38 by 灵魂机器[未注册用户]
帅哥,我要完整版的!
soulmachine@gmail.com

#19楼  回复 引用   

2007-01-04 08:46 by 虫子[匿名][未注册用户]
我也要一份,谢谢!
dianshijin@gmail.com

#20楼  回复 引用   

2007-01-04 08:47 by flying[匿名][未注册用户]
hyzhan@live.com
麻烦楼主邮一份

#21楼  回复 引用 查看   

2007-01-04 09:05 by 数据绑定者      
挺有意思的

把整个项目做个下载吧?

#22楼  回复 引用 查看   

2007-01-04 09:08 by 魏琼东      
eastjade@21cn.com

#23楼  回复 引用   

2007-01-04 09:21 by Money[未注册用户]
给个完整版的。。5831107@163.com

#24楼  回复 引用 查看   

2007-01-04 09:32 by jailu      
jailusd@hotmail.com谢谢

#25楼  回复 引用   

2007-01-04 09:35 by jxh77271[未注册用户]
lygjxh@gmail.com
谢了

#26楼  回复 引用   

2007-01-04 10:00 by bing717[未注册用户]
jinbing@gmail.com

#27楼  回复 引用   

2007-01-04 10:37 by 泥娃[未注册用户]
huijp@163.com

谢谢

#28楼  回复 引用   

2007-01-04 11:38 by dstang2000
很好!
只有可惜Web的没调通。

#29楼  回复 引用   

2007-01-04 12:43 by LovePP[未注册用户]
我想研究下,xzg_del@sohu.com非常感谢

#30楼  回复 引用 查看   

2007-01-04 12:57 by 蛙蛙池塘      
onlytiancai@gmail.com,给俺一个,谢谢。

#31楼  回复 引用 查看   

2007-01-04 13:10 by 网魂小兵      
我最近也需要这个东西,谢谢给我一份!
myxbing@hotmail.com

#32楼[楼主]  回复 引用 查看   

2007-01-04 13:19 by 笨小苏      
楼上的们,请认真看看
已经有下载链接了

#33楼  回复 引用   

2007-01-04 14:27 by LovePP[未注册用户]
为什么我调不通?怎么找接口地址?我怎么都是“基础连接已关闭:接收时发生意外错误”〉?我是新手,觉得这个很好玩。怎么弄啊啊?QQ:215130459

#34楼[楼主]  回复 引用 查看   

2007-01-04 16:28 by 笨小苏      
@LovePP
我也没调通,脚本是凭感觉写的

#35楼  回复 引用   

2007-01-04 16:34 by j[匿名][未注册用户]
QQ桥的SVN地址已经失效了,不过我打包了一份,可以下载
http://web.ruixin.net/likemulu/qq.rar

#36楼  回复 引用   

2007-01-04 19:17 by john[匿名][未注册用户]
xulousq@163.com
谢谢你

#37楼  回复 引用   

2007-01-04 19:22 by john[匿名][未注册用户]
看到下载地址了,呵呵

#38楼  回复 引用   

2007-01-04 20:51 by 天才阿布~~~~~~~[未注册用户]
我看的头都大了,这东西要来干吗……

#39楼  回复 引用 查看   

2007-01-04 22:26 by U2U      
很好,支持!!!!

#40楼  回复 引用   

2007-01-05 08:44 by LovePP[未注册用户]
登陆不成功,http://tqq.tencent.com:8000http://webqq-proxy.qq.com:8080咋都不行呢
to:j[匿名] 下载了不会用呢

#41楼[楼主]  回复 引用 查看   

2007-01-05 09:03 by 笨小苏      
@LovePP
http://tqq.tencent.com:8000这个地方应该是被封了
http://webqq-proxy.qq.com:8080介个地方的访问好象是需要图片验证字符的,我用maxthon的收集面板做调试,maxthon_appin文件夹下面有个getsession.txt就是这么用的

#42楼  回复 引用   

2007-01-05 09:10 by 哈哈[匿名][未注册用户]
厉害,研究看看

#43楼  回复 引用   

2007-01-05 11:04 by zzf[未注册用户]
太历害了.佩服!

#44楼  回复 引用 查看   

2007-01-05 13:17 by 言学      
请问牛人,具体获取一个窗体上的某个控件,有没有什么章法可循。
IntPtr ip = WinApi.FindWindow(lpszParentClass,lpszParentWindow);
IntPtr EdithParentWnd = WinApi.FindWindowEx(ip,new IntPtr(0),"#32770","");
IntPtr EdithWnd = WinApi.FindWindowEx(EdithParentWnd,new IntPtr(0),"AfxWnd42","");

如上代码,您是怎么知道需要按照这个顺序依次获取呢?
我也打算开发一个类似的软件,多谢了!

#45楼[楼主]  回复 引用 查看   

2007-01-05 13:45 by 笨小苏      
@言学
visual studio .net 工具里有个spy++
里面会列出来

#46楼  回复 引用 查看   

2007-01-05 15:10 by 言学      
多谢多谢。

#47楼  回复 引用   

2007-01-13 15:09 by lara[未注册用户]
有什么公能

#48楼  回复 引用   

2007-01-18 15:19 by 小飞鱼[未注册用户]
怎么使用阿?具体点!这个很好玩~!就是不会用!

#49楼  回复 引用   

2007-04-25 14:04 by rollo[未注册用户]
string lpszParentClass = "#32770"; //整个窗口的类名
这里的 "#32770" 是 怎么得来的 我这ip 返回我总是0
string lpszClass_Text = "RichEdit20A"; //查找历史记录类
"RichEdit20A"又是什么 是一人一个样还是都一样的我信箱是
roloemail@163.com 希望能跟你交流

#50楼[楼主]  回复 引用 查看   

2007-04-26 09:52 by 笨小苏      
@rollo
visual studio .net 工具里有个spy++
里面会列出来

#51楼  回复 引用   

2007-05-06 15:34 by 蔷薇[未注册用户]
谢哈

#52楼  回复 引用   

2007-06-01 12:08 by Jirain[未注册用户]
正需要呢,谢谢

#53楼  回复 引用   

2007-08-06 13:02 by lollipop[未注册用户]
THandle,这个值得不到,是空的,QQ2007。。。

#54楼  回复 引用   

2007-08-13 19:02 by K[未注册用户]
使用TQQ发送信息,均显示"发送内容不能为空,请重新输入"
环境:QQ2006正式版+winXP sp2
.net 2

#55楼  回复 引用   

2008-01-11 09:42 by 事实[未注册用户]
高手,能给我发下完整的代码么?学习下
zhangbh.zj@163.com先谢谢

#56楼  回复 引用   

2008-01-14 14:00 by 王一鸣[未注册用户]
楼主,给我发一份好吗,QQ142851

#57楼  回复 引用   

2008-02-04 10:33 by xc gb[未注册用户]
we chinese will fight with america

#58楼  回复 引用 查看   

2008-02-18 23:28 by overred      

C#(基于Udp协议)版QQ机器人
http://www.cnblogs.com/overred/archive/2008/02/17/c_sharp_qq_robot.html

#59楼  回复 引用   

2008-03-21 19:43 by 李白2[未注册用户]
GHDGHGFBHNHVCGB

#60楼  回复 引用   

2008-06-08 11:22 by zhangtianliang[未注册用户]
什么嘛,一个字:垃圾

#61楼  回复 引用   

2008-07-19 13:44 by 你说错了[未注册用户]
--引用--------------------------------------------------
zhangtianliang: 什么嘛,一个字:垃圾
--------------------------------------------------------
是两个字呀!

#62楼  回复 引用   

2008-08-01 16:46 by 大高校[未注册用户]
wugl@35.com
谢谢

#63楼  回复 引用   

2008-09-21 13:03 by lucky,lee[未注册用户]
请高手有时间的时候也帮我发一份,想研究研究是什么东东,谢谢了

#64楼  回复 引用   

2008-10-29 01:11 by 一条[未注册用户]
我喜欢啊呵呵

#65楼  回复 引用 查看   

2008-11-26 10:39 by 米虫      

楼主给俺来分源代码大餐吧!

谢谢!
zhangkai0309@163.com

#66楼  回复 引用 查看   

2009-01-19 09:24 by 黄泉天上来      
写的太详细了 顶楼主了,每个细节都写到了哈哈

#67楼  回复 引用   

2009-01-29 09:00 by yychang[未注册用户]
提供QQ机器人,MSN机器人,GTALK机器人定制服务, 我们的网站,IM机器人:http://www.imrobots.cn