您的位置:首页 > 其它

比较原始的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()

大家后续可以将这个图的差值,进行一系列的转换,然后再加到原来的图片中,只需要差值能够在原图中明显就可以了。

现在没更新一张图,都要重新将脚本运行一遍,后续再改进。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: