• QQ机器人


       这个元旦假期过的比较奇怪,为了向远方的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眼.

  • 相关阅读:
    Java1.4从BIO模型发展到NIO模型
    Java Socket TCP 套接字超时
    浅谈 Java Socket 构造函数参数 backlog
    Java Socket 的BIO模型(以TCP为例)
    TCP三次握手和四次挥手与Java Socket
    TCP报文格式
    Windows安装Wireshark实现127.0.0.1抓包
    NIO入门之多路复用选择器Selector
    晚安西南-----拆装死绳传感器
    晚安西南-----螺扶与拖压
  • 原文地址:https://www.cnblogs.com/sukyboor/p/610451.html
Copyright © 2020-2023  润新知