比较原始的QQ大家来找茬的原型
2016-07-10 11:38
211 查看
昨天不用加班,闲来无事,玩了几把大家来找茬。可惜眼力不够,总是找不出来,心想能不能写个外挂,帮忙找出在哪里。
在网上搜了一下,大体上也有一些利用python,计算来找茬的外挂。
本人python基础比较弱,特别是图像一方面的,能够会调用几个API就不错了。
首先,其实找茬就是核心利用python比较两个图片不同就行了。网上一个大神利用opencv搞出一个外挂,貌似很牛逼,可惜还是上面一句话,对于我等学渣,会调用api就不错了。opencv那么难的东西,就不是我能涉及的了。
第一步,肯定是要查找 找茬的窗口的句柄。
这里,网上相关的介绍还是比较多的,主要就是用到FindWindow来找到句柄。
import win32gui
import win32con
game_hwd = 0
while game_hwd == 0:
game_hwd = win32gui.FindWindow("#32770","大家来找茬")
if game_hwd:
break
time.sleep(2)
这样能够保证 获取到找茬窗口的句柄。
第二步就是抠图了
这里使用到ImageGrab,可以抓取屏幕上的图片。具体使用大家可搜一下。
这里关键就是两张图片不好定位。没办法,用最挫的方法,首先将窗体整张图给grab下来,然后沿着中间进行分开,也就是分成左右两部分,分别记为ima和imb。ima和imb现在还不能直接进行比较。还必须将边沿给去掉,怎么去掉呢,我用最挫的方法,就是用QQ截图,然后大致看边沿里图像有多少像素,然后将边沿去掉。
下图是游戏中的两张图片。
下面是实际运行时,得到的结果。
还是需要人工自己在原来图片上进行对照,比较麻烦。
下面是完整的程序
#coding=gbk
import win32gui
import time
import Image
import ImageChops
import win32con
from PIL import ImageGrab
#s=u"´ó¼ÒÀ´ÕÒ²ç"
game_hwd = 0
while game_hwd == 0:
game_hwd = win32gui.FindWindow("#32770","´大家来找茬")
if game_hwd:
break
time.sleep(2)
win32gui.ShowWindow(game_hwd,win32con.SW_RESTORE)
win32gui.SetForegroundWindow(game_hwd) #强制将窗口放置最前面
game_rect = win32gui.GetWindowRect(game_hwd) #获取窗体的矩形坐标
#print game_rect
width = game_rect[2] - game_rect[0]
height = game_rect[3] - game_rect[1]
rect1 = (game_rect[0]+55,game_rect[1],game_rect[0]+width/2,game_rect[3]-100) #沿中线分开,+55是因为去掉图像的左边沿
rect2 = (game_rect[0]+width/2,game_rect[1],game_rect[2]-55,game_rect[3]-100) #沿中线分开,-55是因为去掉图像的右边沿
#具体的这个55,完全要根据自己的机器运行的实际情况,其实主要就是分辨率,我是通过QQ截图,然后数出来的这个值
ima = ImageGrab.grab(rect1)
imb = ImageGrab.grab(rect2)
#ima.show()
#imb.show()
#out.show()
out = ImageChops.difference(ima,imb) #比较两幅图
out.show()
大家后续可以将这个图的差值,进行一系列的转换,然后再加到原来的图片中,只需要差值能够在原图中明显就可以了。
现在没更新一张图,都要重新将脚本运行一遍,后续再改进。
在网上搜了一下,大体上也有一些利用python,计算来找茬的外挂。
本人python基础比较弱,特别是图像一方面的,能够会调用几个API就不错了。
首先,其实找茬就是核心利用python比较两个图片不同就行了。网上一个大神利用opencv搞出一个外挂,貌似很牛逼,可惜还是上面一句话,对于我等学渣,会调用api就不错了。opencv那么难的东西,就不是我能涉及的了。
第一步,肯定是要查找 找茬的窗口的句柄。
这里,网上相关的介绍还是比较多的,主要就是用到FindWindow来找到句柄。
import win32gui
import win32con
game_hwd = 0
while game_hwd == 0:
game_hwd = win32gui.FindWindow("#32770","大家来找茬")
if game_hwd:
break
time.sleep(2)
这样能够保证 获取到找茬窗口的句柄。
第二步就是抠图了
这里使用到ImageGrab,可以抓取屏幕上的图片。具体使用大家可搜一下。
这里关键就是两张图片不好定位。没办法,用最挫的方法,首先将窗体整张图给grab下来,然后沿着中间进行分开,也就是分成左右两部分,分别记为ima和imb。ima和imb现在还不能直接进行比较。还必须将边沿给去掉,怎么去掉呢,我用最挫的方法,就是用QQ截图,然后大致看边沿里图像有多少像素,然后将边沿去掉。
下图是游戏中的两张图片。
下面是实际运行时,得到的结果。
还是需要人工自己在原来图片上进行对照,比较麻烦。
下面是完整的程序
#coding=gbk
import win32gui
import time
import Image
import ImageChops
import win32con
from PIL import ImageGrab
#s=u"´ó¼ÒÀ´ÕÒ²ç"
game_hwd = 0
while game_hwd == 0:
game_hwd = win32gui.FindWindow("#32770","´大家来找茬")
if game_hwd:
break
time.sleep(2)
win32gui.ShowWindow(game_hwd,win32con.SW_RESTORE)
win32gui.SetForegroundWindow(game_hwd) #强制将窗口放置最前面
game_rect = win32gui.GetWindowRect(game_hwd) #获取窗体的矩形坐标
#print game_rect
width = game_rect[2] - game_rect[0]
height = game_rect[3] - game_rect[1]
rect1 = (game_rect[0]+55,game_rect[1],game_rect[0]+width/2,game_rect[3]-100) #沿中线分开,+55是因为去掉图像的左边沿
rect2 = (game_rect[0]+width/2,game_rect[1],game_rect[2]-55,game_rect[3]-100) #沿中线分开,-55是因为去掉图像的右边沿
#具体的这个55,完全要根据自己的机器运行的实际情况,其实主要就是分辨率,我是通过QQ截图,然后数出来的这个值
ima = ImageGrab.grab(rect1)
imb = ImageGrab.grab(rect2)
#ima.show()
#imb.show()
#out.show()
out = ImageChops.difference(ima,imb) #比较两幅图
out.show()
大家后续可以将这个图的差值,进行一系列的转换,然后再加到原来的图片中,只需要差值能够在原图中明显就可以了。
现在没更新一张图,都要重新将脚本运行一遍,后续再改进。
相关文章推荐
- Access在winform下无法进行插入,修改,删除的问题
- encode_utf8 把字符编码成字节 decode_utf8解码UTF-8到字符
- 自动升级OPENSSH shell脚本 推荐
- python3.x九九乘法表
- ViewPager轮播图:自动无限轮播,手指长按停止,实现点击事件(实用版)
- React Native开发必备的10个插件包
- React Native开发必备的10个插件包
- React Native开发必备的10个插件包
- encode_utf8 把字符编码成字节 decode_utf8解码UTF-8到字符
- encode_utf8 把字符编码成字节 decode_utf8解码UTF-8到字符
- OpenCV3.1.0+VS2013配置+Win10(64位)
- “深入理解”—选择排序算法
- [置顶] 梯度下降算法总结
- “深入理解”—选择排序算法
- write&read&open
- Java GC编程
- 原型模式(Prototype)
- Linux-安装和使用memcached
- 微软称将为Linux用户带来“令人振奋的消息
- 对优先队列的一点点理解!