比较原始的QQ大家来找茬的原型

     昨天不用加班,闲来无事,玩了几把大家来找茬。可惜眼力不够,总是找不出来,心想能不能写个外挂,帮忙找出在哪里。

    在网上搜了一下,大体上也有一些利用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()

大家后续可以将这个图的差值,进行一系列的转换,然后再加到原来的图片中,只需要差值能够在原图中明显就可以了。
现在没更新一张图,都要重新将脚本运行一遍,后续再改进。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值