Delphi实现图像识别制作外挂

最近应几个朋友的要求帮他们做一个QQ斗地主的外挂,于是就研究了下。(比较简单,希望大家不要笑化^_^)
网上有做外挂文章,找了,看了,试着理解了,但水平有限,貌似不是很明白,但总的来说就三种
1,封包技术(个人认为是最难的,但是效果出来是最好的,因为里面还涉及到解密技术所以个人认为是有些难度的,工作量达);
2,内存扫描
3,图像识别(个人认为是比较大众化的,也最容易实现的,但效果也是最差的,而且束缚比较的多);

 

前面2个我不说了,就说第三个我所用的方法以及个人认为关键的地方以及部分代码
1,不用说肯定是findWindow  找斗地主窗口句柄,然后    insertfrm := TFrmInsert.CreateParented(DDZhwd);//可以实现把窗口插入到游 戏面板中了。。。
2, GetWindowRect(DDZhwd, DDZr);//获得斗地主场景图片
  //开始获取QQ斗地主界面图片
  DDZWorkbitmap := TBitmap.Create; //创建内存存储斗地主界面图片,用来分析象素点
  DDZhdc := GetWindowDC(DDZhwd); //获取界面设备场景
  CanvasCource := TCanvas.Create;
  CanvasCource.Handle := DDZhdc;
  DDZWorkbitmap.Width := DDZr.Right - DDZr.Left; //斗地主界面距离
  DDZWorkbitmap.Height := DDZr.Bottom - DDZr.Top;
  DDZWorkbitmap.Canvas.CopyRect(DDZWorkbitmap.Canvas.ClipRect, CanvasCource, DDZR); //copy斗地主界面场景3,以上是关键代码,接下来就是捕捉象素点了,大家如果仔细察看下扑克牌会发现,扑克牌的边框都是clblack的,大概明白了吧,然后是 如何识别是什么牌,如果仔细研究下就会发现不同的牌肯定会有一个象素点是区别于其他牌的。。。因此就可以捕捉到了牌就可以实现记牌的功能了。。。
象素点可以用  DDZWorkbitmap.Canvas.Pixels[210, 595]  获取。。。具体看帮助
4,关于“开始”可以捕捉最上面的三张牌,如果没有了表明一副牌还没开始。。。
5,大致的关键点都已说明,由于是象素识别的所以在一些扑克牌不能别遮盖住,个人感觉执行起来而且效率不是很高,所以不推荐这种方法。。。可以往内存扫描,和封包方向的方法尝试。。。

 

来源:www.51bcw.com

你可能感兴趣的:(编程中心)