Delphi实现图像识别制作外挂
2009-01-18 19:38
1251 查看
最近应几个朋友的要求帮他们做一个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
网上有做外挂文章,找了,看了,试着理解了,但水平有限,貌似不是很明白,但总的来说就三种
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
相关文章推荐
- Android文字图像识别并翻译的简单实现
- 使用DELPHI对图片中的文字进行识别的过程(最简单实现)
- 用Delphi制作网络游戏外挂
- Java OCR tesseract 图像智能字符识别技术 Java代码实现
- java实现图像识别
- 利用pytorch实现Fooling Images(添加特定噪声到原始图像,使神经网络误识别)
- C#调用DLL实现图像文字识别(OCR)
- 将 TensorFlow 移植到 Android手机,实现物体识别、行人检测和图像风格迁移详细教程
- [置顶] 基于 TensorFlow 的图像识别(R实现)
- 手写数字识别(二)----SVM 实现Mnist-image 手写数字图像识别
- TensorFlow学习--AlexNet实现&图像识别
- 【图像识别】 Python+Opencv调用摄像头实现人脸识别并保存视频
- 【事件驱动】【数码管识别】(C++多线程实现多幅图像的同步识别)
- Delphi里如何实现图像角点检测?网上搜到的代码都不全,哪位大哥有完整的?
- 将 TensorFlow 移植到 Android手机,实现物体识别、行人检测和图像风格迁移详细教程
- 基于图像识别的分类器的实现
- 验证码&游戏外挂与图像识别——ANN
- Java OCR tesseract 图像智能字符识别技术 Java实现
- 全局Haar-Like特征图像识别的C++实现
- python实现图像识别功能