上一篇我们已经简单实现了python调用大漠插件并输出版本号的功能,接下来我们要做的就是通过大漠插件模拟鼠标点击和键盘文字输入。 由于近年来最热门的游戏基本都是手游,所以我们也会以手游为例来进行游戏脚本的开发。大漠插件是一款针对Windows平台的鼠标键盘模拟+图文查找库,
这样我们要想实现手游脚本开发的第一步,就是下载Android模拟器,然后在对安卓模拟器进行鼠标和键盘的模拟,以此来实现自动化游戏脚本。
对于Windows系统来说,在桌面上能看到的所有内容,其实都是一个又一个的Windows窗口,Android模拟器也不例外;按照大漠API的说明文档,我们要实现模拟鼠标点击和键盘按键的第一步,就是调用大漠插件的API对具体的窗口进行绑定,过程中有用到一些大漠插件的API(具体API介绍请自行查阅大漠插件的API文档),以下是我们进行窗口绑定的代码:
import win32com.client
# 创建大漠实例对象
def createDMInstance():
dm = win32com.client.Dispatch('dm.dmsoft') # 调用大漠插件,获取大漠对象
print("大漠插件版本号:" + dm.ver()) # 输出版本号
return dm
# 查找窗口,返回找到的窗口句柄
def findWindow(dm, windowClass, windowTitle):
windowHandle = dm.FindWindow(windowClass, windowTitle)
print("找到的窗口句柄 = " + str(windowHandle)) # 输出窗口句柄ID
return windowHandle
# 绑定窗口
def bindWindow(dm, windowHandle):
isBindSuccess = dm.BindWindow(windowHandle, "normal", "normal", "normal", 0)
print("是否绑定成功 = " + str(isBindSuccess)) # 是否绑定成功
return isBindSuccess # 是否绑定成功
if __name__ == '__main__':
dm = createDMInstance()
windowHandle = findWindow(dm, "", "夜神模拟器")
isBindSuccess = bindWindow(dm, windowHandle)
在成功绑定窗口之后,我们就可以对窗口,也就是夜神模拟器为所欲为了!
这里调用大漠插件的API【MoveTo(x, y)】把鼠标移动到具体的坐标点(整个坐标系是以安卓模拟器左上角为原点,向下向右展开),然后再调用【LeftClick()】,这样就成功实现了模拟点击。
# 点击窗口
def clickWindow(dm, x, y):
dm.MoveTo(x, y)
dm.LeftClick()
if __name__ == '__main__':
dm = createDMInstance()
windowHandle = findWindow(dm, "", "夜神模拟器")
isBindSuccess = bindWindow(dm, windowHandle)
if isBindSuccess:
clickWindow(dm, 136, 161)
可以看到在python运行起来的一瞬间,鼠标自行移动到了x=136,y=161的位置,并触发点击,打开了应用,这样我们就初步实现了鼠标模拟点击的功能。
文章浏览阅读2.8k次,点赞3次,收藏8次。前言记录一下自己遇到的实习面试经历,希望能对后来人有用。面试总共分为两轮:第一轮是项目面试,主要讲自己做的研究工作以及论文相关情况;第二轮主要是CodingTest测试;这里主要讲讲自己的CodingTest,其实代码测试的题目和LeetCode差不多,水平差不多,题目可能不一定相同。给了我两个题目,一道是困难,一道是简单的。一、题目说明题目1:A为一个十进制数(以整数为例),k位,k<100。求B使得B为大于A的最小整数,且A各位的和等于B各位的和。题目2:给一定数量的信封,带有整数对_华为诺亚方舟 coding
文章浏览阅读7k次。原贴:http://www.linuxeden.com/html/softuse/20090613/66175.html网关和本机IP不同网段的上网办法本机IP地址是 202.*.*.*netmask是255.255.255.192网关是 61.*.*.*两者不在同一网段。Windows下貌似很容易解决,直接设好IP网关即可,路由表会自动设好,Linux却不行。_同一网关下ip不同网段
文章浏览阅读2.4k次。八卦图与二进制的联想易有太极,是生两仪,两仪生四象,四象生八卦!计算机都涉及到哪些数制?二进制(Binary),八进制(Octal),十进制(Decimal),十六进制(Hexadecimal)二进制用于电脑识别十进制用于人来识别而八进制与十六进制就是用来协调人和计算机矛盾的进制二进制有极大的优势:易于物理实现,二进制运算规则简单,机器可靠性高,通用性强,可用于逻辑_十进制-10的真值和机器数
文章浏览阅读2.8k次。在HTML5中,边框的边距(margin)和填充(padding)通常是通过CSS来设置的,而不是直接在HTML中。边框本身是由CSS的border属性定义的,而边距和填充则分别通过margin和padding属性来设置。你也可以分别设置每个方向的边距,如margin: 10px 20px 10px 0;(上10px,右20px,下10px,左0px)。例如,margin: 10px 5px;还要注意的是,虽然示例中使用了div元素来展示边框、边距和填充,但这些CSS样式可以应用于任何HTML元素。_htmlvss上边距框代码
文章浏览阅读10w+次,点赞323次,收藏1.8k次。Jupyter Notebook安装教程_jupyter notebook安装教程
文章浏览阅读7.5k次,点赞15次,收藏78次。“你比个手势,AI就识别出Emoji,浏览器上跑:已开源,推特2.8万赞”本文运行了尼克小哥的开源代码,其中有那么一点点坑吧。zxx让我把这个跑一下,跑是跑成了,但他没用上。尼克用的是TensorFlow.js,用IBM云上的GPU训练的,免费的k80,半小时训练时间,在IBM的annotations上准备数据标注手势图。作者写的教程,其实真的蛮手把手的,就是细心一点就好了。当然,我跑出来..._笔记本摄像头识别动作
文章浏览阅读517次。Tornado一、数据库与Django框架相比,Tornado没有自带ORM,对于数据库需要自己去适配。我们使用MySQL数据库。在Tornado3.0版本以前提供tornado.database模块用来操作MySQL数据库,而从3.0版本开始,此模块就被独立出来,作为torndb包单独提供。torndb只是对MySQLdb的简单封装,不支持Python 3。所以如果在当前版本中使用torndb进行数据库操作,需要修改源代码,所以在此,我们使用pymysql。项目中如果要使用ORM,可以使用SQL
文章浏览阅读477次。题目: Cow Bowling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16077 Accepted: 10705 DescriptionThe cows don’t use actual bowling balls when they go bowling. They each take_the cows don't use actual bowling balls when they go bowling. they each take a number (in the range 0..99), though, and line up in a standard bowling-pin-like triangle like this:
文章浏览阅读810次。MainActivity.xml<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" ="http://schemas.android.com/apk/res/android" an.._intent隐式启动
文章浏览阅读9.6k次,点赞4次,收藏54次。Flutter 是谷歌开发的一款开源、免费的,基于 Dart 语言的U1框架,可以快速在i0S和Android上构建高质量的原生应用。它最大的特点就是跨平台和高性能。Dart是由谷歌,在2011 年开发的计算机编程语言,它可以被用于Web、服务器、移动应用和物联网等多个领域。号称要取代JavaScript._flutter环境搭建
文章浏览阅读92次。点击上方“Java基基”,选择“设为星标”做积极的人,而不是积极废人!源码精品专栏原创 | Java 2020超神之路,很肝~中文详细注释的开源项目...
文章浏览阅读870次。1. system进程在启动过程中会调用SurfaceFlinger类的静态成员函数instantiate来启动SurfaceFlinger服务。启动过程中,首先创建一个SurfaceFlinger实例,此实例会被一个SP 指针引用。当一个对象被一个智能指针第一次引用的时候,该类的onFirstRef方法将被调用:void SurfaceFlinger::onFirstRef(){mEventQu..._android bootnim