huidong

首页 | 会员登录 | 关于争取 2022 寒假做出汇东网 Ver3.0.0 !
搜索文章



github: https://github.com/zouhuidong/HDQQRobot


最近QQ打击第三方QQ机器人,因为QQ提出了官方的机器人接口。

但是使用它的接口需要申请,很麻烦。

于是我想,可以用粗暴的方式实现第三方(非官方)机器人,虽然功能没有那么全面,但是还是勉强够用,还不会被腾讯限制。

就是:


HuiDong QQ Robot


原理是用win api模拟鼠标移动到QQ窗口,不停地模拟键盘按下 Ctrl + A , Ctrl + C 把消息内容放到剪贴板,然后再从剪贴板取消息内容

取得消息内容后进行分析,以获取消息的详细信息

得到消息之后可以做回复,回复的原理是把消息内容放进剪贴板,再模拟鼠标点击消息输入框,再然后模拟按下Ctrl + V 和 Enter 来发送消息。

所以,这个机器人的运行需要占用鼠标、键盘以及剪贴板,可以开个虚拟机挂在后台。


以下项目都在 VS2019 编译通过,win7 和 win10 + TIM(QQ的办公版)测试通过。



Ver 0.5

仅库文件:

HDQQRobot_ver0.5.zip


包含例子:

QQRot_WoofKillGame.zip

这个例子是一个单机狼人杀游戏移植而成的,原程序:http://www.huidong.xyz/?mode=2&id=147

该程序使用了EGE图形库,此库官网:http://xege.org


更新内容:

  1. 可以通过QQGetVersionString或QQGetVersionFloat函数得到HDQQRobot版本。

  2. 更新QQStartMenu函数,现在可以显示HDQQRobot版本。

  3. 删除QQLexMessage函数,并只需要调用QQGetMessage函数即可。且QQGetMessage函数不再需要传参了。

  4. 不需要用户自己创建QQMsg类型的链表头结点以及用以存储QQ消息的string类型变量。

  5. 移除了HDQQMsg.cpp。

  6. 删除了QQMsgAddNode函数。

  7. QQMsgGetLast更名为QQGetLastMsg且不需要再传参了。

  8. 新增QQGetMsgHead函数,用以得到QQMsg链表的头结点指针。

  9. 移除QQGotoMsgWnd函数和QQGotoSendMsgWnd函数。

  10. 可以用QQSetMyName设置自己的名称,用QQGetMyName得到自己的名称(前提是设置了)。

  11. 可以使用QQSetIsGetMyMsg函数设置是否接收自己的消息,如果为false,则QQGetMessage函数若得到自己的消息将返回false,但仍将消息存入消息链表。可以使用QQGetIsGetMyMsg函数得到当前是否获取我的消息

  12. 更新QQMessageBox函数,可以将MessageBox函数方便地替换为QQMessageBox函数。

  13. 由于群昵称中有时带有如“【潜水】”的前缀,为了得到更准确的用户昵称,从此版本开始将过滤掉名称前缀。

  14. 默认按键延时改为50ms


Ver 0.4


仅库文件:

HDQQRobot_Ver0.4.zip


包含例子:

HDQQRobot_Ver0.4_with_example.zip

此例子用到了EasyX图形库以绘制图像,此库官网:www.easyx.cn

这个例子是一个多人游戏的机器人,可以输入 ".help"  来查看命令菜单


Ver 0.4 更新:

  1. 更新发送图片(图文混合消息)的功能

  2. 修复空白消息读取错误的bug

  3. 默认按键延时改为30ms


要发送图片消息,可以使用QQSendMsg函数并传入一个HBITMAP参数


要发送图文混合消息,可以使用QQAddMsg函数添加图片或文字消息,待消息添加完毕后可以使用QQFlushMsg函数输出待发送的消息



Ver 0.3


HDQQRobot_Ver0.3_with_example.zip


Ver 0.3 更新了许多功能:

  1. 剪贴板防内存非法访问保护

  2. QQ窗口位置,大小锁定,且会顶置窗口,防止鼠标乱点

  3. 以QQMsg结构链表来存储QQ消息,这样就可以存储之前的消息了

  4. 支持读取多行消息、用户名、消息发送时间

  5. 消息响应函数需要自己调用,无需使用HDQQSetResponseFunc函数设置了

  6. 所有函数进行更名,删除了HD前缀



QQ消息分析原理


    QQ的消息举例

        huidong 8:20:33
        ckj,出来玩吗?

        ckj 8:21:12
        不了

    每次得到的消息末尾会多出两个换行,所以需要去除末尾的换行。
    换行是\r\n式,所以删除所有\r,仅保留\n。

    然后开始从后往前读取消息内容,一直到读完一条消息,把它存入链表,这次的分析就算结束。

    当我们读取到换行时,得到接下来的一串以空格或换行结束的字符串(注意是从后往前读取),
    然后对此字符串进行格式判断,判断它是不是时间格式(xx:xx:xx),如果是的话,就继续往后读,
    以此类推得到字符串,判断它是不是日期格式(xxxx/xx/xx)(日期格式只有在消息不是今日发送的情况下才会出现),
    如果也是,那就保存为日期,如果不是,那就取今天的日期为消息发送日期,继续读,剩下的最后一串
    以换行结尾的字符串就是用户名了,如果用户名不为空,那么时间、日期、用户名、消息内容,我们就都读取到了。

    这样的做法可能会无法识别他人造假别的用户发送信息,但是也没有再更好的办法了。

    根据我的研究,xx:xx:xx中,小时可能只有一个数字,而分钟、秒是肯定有两个数字;
    xxxx/xx/xx中,月数和号都有可能只有一个数字,据此,可以进行格式判断。


Ver 0.1 - 0.2


Ver 0.1 HDQQRobot.zip

这个项目是一个使用HDQQRobot的走迷宫机器人。


Ver 0.2 HDQQRobot_Ver0.2.zip

此项目仅包含库文件


Ver 0.2 更新:

新增函数 HDQQIsPause(); 可以自动检测F8的按下来暂停机器人,且判断F7的按下来使机器人继续工作

修复部分机器人在部分QQ版本上运行无效的bug


适用于Ver 0.2 的例子程序:


huidong编写,功能:走迷宫,判断脏话,以及几个小功能

source.zip


ckj编写( 有改动 ),功能:判断脏话,猜数字

source_ckj.zip



使用教程(请仔细看,不然不会使用)


图片.png


首先:将鼠标移动到QQ消息窗口上,按下F11,注意:按下F11的时候不需要点击cmd窗口,程序会全局捕获按键,下面也一样,按键都是全局捕获的

然后将鼠标移动到QQ输入框上,按下F12。


因为这个机器人的实现需要模拟鼠标键盘,所以按F11的时候推荐将鼠标放到消息框的右下角,这样鼠标不会点到消息

按F12的时候,就把鼠标放在输入框内就好,没什么要特别注意的。

如下图:


图片.png


然后按下F10开启机器人


按下F8暂停机器人,然后按下F7使机器人继续工作(Ver 0.2新增)


按下F9来停止机器人(可能需要长按一下)


开启机器人之后,你无法控制你的鼠标,如果需要停止,请务必按F9


保证启动机器人时,没有别的程序有快捷键冲突。


有的时候,开启了机器人,对方说了指令,可机器人没反应怎么办?

下面的教程很重要:

两种可能:

1. 鼠标位置不太对,【稍微】 移动鼠标,然后可能就可以


2. 模拟 Ctrl+C 时复制聊天内容失败,此时请先按F9关闭机器人,然后在一个文本框按Ctrl+V检测剪贴板内是否有信息,

如果没有信息,说明Ctrl+C时获取信息失败,措施如下:

    先看下机器人启动的时候输入法关了没,如果没关,把它关掉。

    然后手动在QQ消息框里Ctrl + A, Ctrl + C,再到一个文本框里粘贴出来看看有没有信息,如果有信息,那可以了,重启机器人再继续就行。

    如果手动复制出来什么也没有,说明你可能打开了什么程序,检查一下,把它关掉再试。


还不行的话,重启电脑试试。






返回首页


Copyright (C) 2018-2024 huidong