背景:忆起10年前玩过的网游《热血江湖》。游戏中不定时出现可使用必杀技提示,需要在此时键盘按键(必杀技需根据提示按多个键位)才可使用。

思路一:通过python调用windows大漠插件dm.dll,使用插件中封装好的函数来操作。但是XP系统使用python的win32模块总是报错(可能系统问题),虽然换了win7就正常了,感觉不爽,于是有了思路二。

思路二:PIL定时获取指定位置图片,与按键提示图片对比,如匹配则模拟按对应按键。

上代码结合注释(通过游戏内聊天输入框测试通过):

#coding:utf-8

from ctypes import *

from PIL import ImageGrab, Image

import ctypes

import math

import operator

import time

import win32gui

import win32api

import win32con

import win32com.client

class RECT(ctypes.Structure):

_fields_ = [('left', ctypes.c_int),

('top', ctypes.c_int),

('right', ctypes.c_int),

('bottom', ctypes.c_int)]

def get_image_histogram(imgobj):

return imgobj.histogram()

def pil_image_similarity(h1, h2):

rms = math.sqrt(reduce(operator.add, list(map(lambda a,b: (a-b)**2, h1, h2)))/len(h1) )

return rms

if __name__=='__main__':

time.sleep(5) #首先休眠5秒,留出时间从cmd窗口切换至游戏窗口

print 'start'

dm = win32com.client.Dispatch('dm.dmsoft' ) #调用大漠插件

h_a = get_image_histogram(Image.open('a.jpg'))

h_d = get_image_histogram(Image.open('d.jpg'))

h_s = get_image_histogram(Image.open('s.jpg'))

HISTS = {'a.jpg': h_a, 'd.jpg': h_d, 's.jpg': h_s}

s = 0 #成功按键计数器

while 1:

try:

rect = RECT()

HWND = win32gui.GetForegroundWindow()#获取当前窗口句柄

ctypes.windll.user32.GetWindowRect(HWND, ctypes.byref(rect))#获取当前窗口坐标

coordinate = (rect.left+385, rect.top+400, rect.right-390, rect.bottom-195)#转换为预截图窗口坐标,根据游戏调整

pic = ImageGrab.grab(coordinate)#截图

pic.save('123.jpg')

pic = Image.open('123.jpg') #将截图对象换成Image对象,这样histogram结果才准确

h_pic = get_image_histogram(pic)

#按键提示的原图片和对应键码值

img_list = {'a.jpg': 65, 'd.jpg': 68, 's.jpg': 83}

for img in img_list.keys():

if(pil_image_similarity(HISTS[img], h_pic)<1): #用新截图与原图对比

dm.keypress(img_list[img]) #如匹配则调用大漠插件函数按下对应键

if img=='d.jpg':

s += 1 #成功完成连击,计数器++

print '%s ok' % s

break

except:

pass

time.sleep(1) #游戏按键提示持续2-3秒,休眠一秒节省资源

结局:轻看了这款已入末路,bug百出的游戏。它的防外挂可以识别windows消息模拟按键,除聊天框可以模拟输入成功外,其余均失败。

应对方法:第二天使用了大漠插件的硬件模拟,搞定收工。

备注:实际上整个过程都可以用大漠完成,而且还能兼容当前/非当前窗口、多进程等情况。但用自己写的脚本感觉更cool~

最后:使用大漠插件不要忘记注册dm.dll到电脑中。

python 模拟触屏_python一次简单游戏辅助的经历(截取屏幕模拟键盘)相关推荐

  1. 使用pymouse库模拟鼠标操作,做一些简单游戏辅助

    最近在玩爱江山更爱美人,里面不少地方可以使用pymouse库模拟鼠标操作 帮助做一些重复简单的任务 pymouse库的安装 使用方法,可以看一下代码 一.钓鱼 #将窗口放在右上角 #x,y 为开始im ...

  2. android 使用shell模拟触屏_Appium常用操作之「微信滑屏、触屏操作」

    坚持原创输出,点击蓝字关注我吧 作者:清菡 博客:oschina.云+社区.知乎等各大平台都有. 目录 一.滑屏操作 1.访问之后,马上就滑屏可以吗? 2.连续实现 2 次滑屏 3.代码 二.模拟触屏 ...

  3. 安卓sendevent模拟触屏问题求解

    uinput模拟触屏 需要创建虚拟设备才不会与手指触屏冲突但网上并没有相关的示例,教学这类 但是sendevent多指操作时与触摸相冲突,导致闪屏/断触 经测试 在3-4根手指触屏时,sendeven ...

  4. python adb控制手机制作剑气除魔游戏辅助

    python adb控制手机制作剑气除魔游戏辅助 python adb控制手机进行操作 游戏脚本流程 python adb控制手机进行操作 做好准备: 手机或者是模拟器都可以,手机的话usb线连接电脑 ...

  5. python怎么清屏_python怎么清屏

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我试图用python编写一个程序,但是我不知道如何清除屏幕. 我同时使用wind ...

  6. Android自动化测试之Shell脚本一——模拟触屏事件

    摘自:http://guolin.guosfamily.com/2012/02/15/android-automated-test-by-shell-touch-event/ Android自动化测试 ...

  7. python后台截屏_Python实现屏幕截图

    之前使用Python构建了一个图片转文字小工具,但是使用的是使用系统自带的截图工具然后监听目录变化来实现的.接下来我想直接使用Python来构建一个截图工具,这样就可以结合转换工具使用. 构建图形界面 ...

  8. python手机触屏代码_JS移动客户端--触屏滑动事件及js手机拖拽效果

    移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件 ...

  9. python 模拟触屏电脑操作_如何在硒中模拟触摸屏?

    我试图创建一个机器人,这个机器人必须点击一些元素,这些元素不能识别鼠标点击,但能识别触摸,我在网上搜索了一下,我找到了一种模拟触摸事件的方法. 这是我写的from selenium import we ...

  10. Python调用pywin32模拟触屏滑动 刷宝视频,自动刷视频python

    本软件纯绿色,支持各种软件查杀,软件太大是因为python编译后最小的一个都8M, 使用方法下载AppwerMirror和手机一起搭配使用! 官方地址:https://software.airmore ...

最新文章

  1. layui 横向表单_对layui中表单元素的使用详解
  2. hhc.exe制作chm
  3. leetcode155|最小栈(java)题解
  4. 使用js设置ul标签的显示或隐藏和超链接调用js文件的方法
  5. 如何用代码控制midi数据格式的速度_音频软件大全,你知道几个音频软件,自媒体人都在用的音频软件...
  6. git-对比不同-版本与文件的对比,版本与版本的对比
  7. RabbitMQ学习之ConntectionFactory与Conntection的认知
  8. 2018mysql数据库面试题_面试题: mysql 数据库去重 已看1 不好使
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的洗衣店服务平台管理系统
  10. linux必须运行在enforcing,设置 Selinux环境为 Enforcing模式
  11. 转-Android之PreferenceActivity
  12. ssms远程服务器地址,SSMS无法连接到远程服务器,崩溃
  13. nbiot信号 服务器,物联网协议之NBIOT
  14. 一句话理解Vue核心内容
  15. 智能家居到智慧家庭-由远程操作设备到家庭智慧服务
  16. easyopen——一个简单易用的接口开放平台
  17. Java集合(二二): LinkedList源码剖析
  18. Alphafold2:Highly accurate protein structure prediction with AlphaFold
  19. springboot高校固定资产管理系统计算机毕业设计
  20. 基于java闲一品交易平台计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

热门文章

  1. MATLAB图像处理(一)——计算机图形学之图像形状识别
  2. Qt——原地奔跑的小人
  3. 金融科技大数据产品推荐:金蜂巢大数据集成与脱敏系统
  4. android 图片置顶,Android布局图片置顶
  5. win10,对于VNR无法使用OCR光学识别的方法,仿照大佬们所讲,图解
  6. i78750h和i58300h对比哪个好
  7. ICEM 网格划分技巧(21-5)
  8. 网络邻居上的计算机没权限,WinXP打开网上邻居提示“您可能没有权限使用网络资源”怎么办?...
  9. 如何制作一寸、二寸、六寸照片
  10. 2022年合肥及合肥市各地稳岗补贴申请条件及补贴标准申请流程实施细则