【好玩的应用】QQ连连看辅助工具
自己学了这么久的C语言,但没有写出过什么可以用的东西来,总觉得心里不爽。这几天实在是不想干正事,在网上瞎逛逛,结果发现有人写了连连看的外挂。顿时觉得这很有意思啊。于是把代码下载下来,捣鼓了捣鼓。发现还挺简单的,于是自己研究了一下,仿照着写了一个。
外挂的主要思路:获取窗口位置,获取屏幕信息对图片编码,查找可消除对,模拟鼠标点击来消除。
1.外观:

这个是用MFC做的,我自己是一点MFC都不会的,开始在界面上卡了好久,一直在网上找MFC的教程。但是网上的教程都大多扯些杂七杂八的东西,看了很久都不知道究竟怎样才能做出一个界面。后来我干脆不看了,直接上手试试,在vs2012里面创建了一个MFC的应用。结果发现基本的外观实现起来很简单。直接把控件拖进去就行了。再把属性改改就好了。
外观做好后,要把点击按钮和功能函数联合起来。
在MFC自动生成的Dlg的类中加入功能函数声明
里面还有一些后面需要用到的关于图像编码的信息也放在类里面。
class CLinkGameHelperDlg : public CDialog
{
public:
CWnd * myc;
MYCOLOR * tc; //记录连连看游戏中的每一种图片信息
int tcnum; //记录连连看游戏中的图片种类数
int* map; //记录连连看游戏的编码结果
int pnum; //记录总的待消除图片数
CRect loc;
CLinkGameHelperDlg(CWnd* pParent = NULL); // 标准构造函数
enum { IDD = IDD_LINKGAMEHELPER_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
HICON m_hIcon;
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnButtonLock(); //下面的这些函数就是与按钮对应的
afx_msg void OnButtonClear();
afx_msg void OnButtonClearAll();
afx_msg void OnButtonAuto();
afx_msg void OnButtonUpGrade();
afx_msg void OnButtonHelp();
DECLARE_MESSAGE_MAP()
};
然后在对应的cpp文件中找到
BEGIN_MESSAGE_MAP(CLinkGameHelperDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
END_MESSAGE_MAP()
下面加入函数与按钮的连接:
BEGIN_MESSAGE_MAP(CLinkGameHelperDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_LOCK, OnButtonLock)
ON_BN_CLICKED(IDC_BUTTON_CLEAR, OnButtonClear)
ON_BN_CLICKED(IDC_BUTTON_CLEARALL, OnButtonClearAll)
ON_BN_CLICKED(IDC_BUTTON_AUTO, OnButtonAuto)
ON_BN_CLICKED(IDC_BUTTON_UPGRADE, OnButtonUpGrade)
ON_BN_CLICKED(IDC_BUTTON_HELP, OnButtonHelp)
END_MESSAGE_MAP()
2.锁定窗口+编码
现在进入功能实现的第一步:找到QQ连连看的游戏窗口。可以通过下面的语句实现:
该语句会找到窗口名为:QQ游戏 - 连连看角色版 的窗口。如果失败了,我们提供失败的信息。
CWnd *p = CWnd::FindWindowA(NULL, "QQ游戏 - 连连看角色版");
if(p == NULL)
{
MessageBox("请启动连连看游戏窗口");
return;
}
如果锁定成功,那么我们就可以通过获取窗口信息来对图片编码了。
观察游戏界面:可以知道左上角的第一个图片距窗口上方180像素,左边10像素,每个图片大小为31*35,共有19*11个放图片的位置。

获取窗口相对屏幕左上角的坐标
myc = p; //连连看的窗口
myc->ClientToScreen(&loc); //获取连连看窗口相对屏幕的位置 loc是个CRect的类型,在上面的类里面有定义
获取屏幕(x,y)处的像素值:
CDC *pdc=myc->GetDC();
pdc->GetPixel(x , y);
根据上面的图片信息和获取的窗口相对屏幕的位置我们可以知道每一个图片相对屏幕左上角的坐标。
我们在每张图片上采样4个点,获取像素值。
定义一个MYCOLOR的结构来存一个图片的四个采样点的像素值:
//图片结构的定义 取图片上的四个点的像素
typedef struct MYCOLOR
{
COLORREF c[];
}MYCOLOR;
定义一个MYCOLOR的数组tc,来存放不同种类型的图片,每获取一张图片的4个像素点信息后与tc中已经存放的图片做比较,如果有相同的就获取已经有的编号(在数组中的位置,从1开始),如果不同则在tc中加入这种新图片。
注意:底色的深蓝像素是(48 76 112)如果四个采样点的像素都接近背景值,则认为该位置没有图片,编码0.
用一个整数数组map来存放编码信息。
下图是给定场景的编码结果:

(题外话:大家能猜出来那露出了半个眼睛的人是谁吗?)
3.找可消除的图片对
有了编码信息后,我们就可以查找可以消除的图片了。关键是图片要一致,且路线不能超过两个弯。
图片一致很好解决,选一个基准图,然后从后面遍历所有的图片,找到与其编码相同的。
难点在判断路径:从下图给出路径判断的方法,分析横竖横类型的连线。

竖横竖类型的连线同理。
只要能够找到两种连线的任意一种,即表明两个图片可以相消。
4.鼠标点击消除
用下面的语句实现鼠标移动和点击:
::SetCursorPos(point1x * PICTUREWIDTH + LEFTGAP + r1.left + , point1y * PICTUREHEIGHT + UPGAP + r1.top + ); //点击point1位置的图片
mouse_event(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_LEFTUP,,,,);
点击后把相应位置的编码改为0.
至此基本的原理就讲完了。
我的界面里面,锁定是实现锁定和编码功能的。
消除是点击一下消除一个的。 这里要注意,每次点击后,要把鼠标的位置移动到辅助软件的消除键上,要不然点一样鼠标就保持在游戏窗口的某个图片上,还要人工的再把鼠标放到消除键上点击,非常麻烦。每次把鼠标移动到消除键上方便连续点击。
全消:顾名思义,一次全清。但问题是360总会冒出来,把屏幕给占了,导致点击出错。如果有安全软件弹出来需要重新锁定。
自动消除:全消虽然爽,但是容易招骂。自动消除就是会隔200ms-1200ms的随机时间点击一下。看起来比较真实。问题是,在自动消除的过程中,鼠标一直是被占用的,难以中途停止。我加了一个窗口移位检测,每次消除前重新获取一下窗口位置,如果改变了就停止,并弹出消息。这样可以防止意外情况。
升级:没有实现。
帮助:顾名思义,就是使用说明。
发布版本:
把属性的Release配置中的的MFC使用改成在静态库中使用MFC
平台工具集改为 Visual Studio 2012 - Windows XP(v110_xp) 没有这个选项的需要下载补丁。
问题:
1.所有的工作都不能出现意外,如果说在自动消除的过程中,有个人给扔了个禁手的道具,辅助工具是检测不出来的,并且还会不断的点击屏幕。这时必须晃动窗口退出自动消除,再重新锁定。
2.在扩展屏上,这个外挂会失效。必须去掉扩展屏。
工具和源码下载:
http://yun.baidu.com/share/link?shareid=2181599825&uk=2757788903
【好玩的应用】QQ连连看辅助工具的更多相关文章
- c#QQ连连看辅助
近来无事,写个连连看辅助,下面先说下思路吧(口才不行,见谅哈) 游戏辅助有三种方法,一种是读内存,这个不知道怎么分析,还有一种是获取封包,这个分析起来复杂,最后一种是图片识别再分析,这里采用最后一种 ...
- QQ连连看-外挂
QQ连连看-外挂 2014-11-06 参考 [1] [视频教程] c语言实践课程之qq连连看辅助开发 [2] CE工具下载 [3] [原创]qq连连看外挂制作详解
- 分享一个LiteDB做的简单考试系统辅助工具
凌晨,被安排在公司值班,因为台风“灿鸿”即将登陆,风力太大,办公楼,车间等重要部分需要关注.所以无聊,那就分享一下,今天给朋友临时做的一个小的考试系统辅助工具吧.其实非常小,需求也很简单,但是可以根据 ...
- 对"QQGame-大家来找茬"的辅助工具的改进
[前言]最近在博客园首页上看到有“大家来找茬”这个游戏(此游戏为找出两个相近图片的不同点)外挂的相关帖子,所以这里我也翻看了我之前(2009年5月)的写的一个简单的辅助程序(采用 VC6 开发的).我 ...
- 三个有用的SQL辅助工具
三个有用的SQL辅助工具 编写人:CC阿爸 2015-1-23 工欲善其事必先利其器,今天在这里,我想与大家一起分享三个有用的SQL辅助工具.有兴趣的同学,可以一同探讨与学习一下,否则就略过吧. 相信 ...
- 最新:百度春节抢百万游戏--汤圆向前冲--辅助工具v1.0.0.2
https://www.cnblogs.com/Charltsing/p/ADBJumpTY.html 联系QQ:564955427 本程序为Windows版,不要在手机里面打开. 汤圆向前冲辅助工具 ...
- 【分享】Vue 资源典藏(UI组件、开发框架、服务端、辅助工具、应用实例、Demo示例)
Vue 资源典藏,包括:UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和 ...
- 办公达人私藏的EXCEL辅助工具,一人抵十人,高效办公就靠它了!
有很多小伙伴在日常工作中都离不开EXCEL的使用,但EXCEL实在是有太多困难.又复杂的操作,时间紧任务重这一天又废柴了,哎! 别担心,今天将为您分享个逆天强大的EXCEL辅助工具,帮大家快速搞定—— ...
- Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例
Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和WeUI的组件库 ...
随机推荐
- 什么是WEB服务器?
简单的理解: 一个公用的服务器,你可以放置网站文件,让全世界浏览,可以放文件,全世界下载.web服务器一般指网站服务器. web服务器是基于网站架设的服务器,我们平时可以浏览的网页都是在别人的服务 ...
- 信号处理程序(signal handler)会被重置的信号
首先说明我的系统,CentOS 6.6,内核为2.6.32-504.12.2.el6.i686. 当用signal对某个信号设定信号处理函数的时候,有些信号的处理函数会被重置,有些则不会,这种情况的具 ...
- Android Audio Play Out Channel
1: 7嘴8舌 扬声器, 耳机, 和听筒 就是通过: audiomanager.setmode(AudioManager.MODE_IN_COMMUNICATION)audiomanager.setS ...
- android的入门学习
android 入门学习. 活动:就是一个包含应用程序的用户界面的窗口.目的就是与用户交互. 意图:就是能够将来自不同应用程序的不同活动无缝连接在一起工作的"胶水",确保这些任务执 ...
- perl编程中的map函数示例
转自:http://www.jbxue.com/article/14854.html 发布:脚本学堂/Perl 编辑:JB01 2013-12-20 10:20:01 [大 中 小] 本文介绍 ...
- JavaScript移除数组元素减少长度的方法
JavaScript移除数组元素减少长度的方法,代码如下: //数组移除长度方法 var array=[]; array[0]="张三"; array[1]="李四& ...
- webstorm 10.0.4 注册码
激活码: UserName:William ===== LICENSE BEGIN ===== 45550-12042010 00001SzFN0n1bPII7FnAxnt0DDOPJA INauvJ ...
- 利用python2.7正则表达式进行豆瓣电影Top250的网络数据采集及MySQL数据库操作
转载请注明出处 利用python2.7正则表达式进行豆瓣电影Top250的网络数据采集 1.任务 采集豆瓣电影名称.链接.评分.导演.演员.年份.国家.评论人数.简评等信息 将以上数据存入MySQL数 ...
- WPF学习02:Routed Events
与传统的桌面开发相比,在事件模型上WPF引入了Routed Events,从开发者的角度上,我们获得了两个便利: 1.可以实现事件路由,即向XAML结构中的父元素路由或者是向子元素路由. 2. Rou ...
- 1014. Waiting in Line (30)
Suppose a bank has N windows open for service. There is a yellow line in front of the windows which ...