本文接上一篇文章 使用Python开发游戏运行脚本(一)成功调用大漠插件
上一篇我们已经简单实现了python调用大漠插件并输出版本号的功能,接下来我们要做的就是通过大漠插件模拟鼠标点击和键盘文字输入。 由于近年来最热门的游戏基本都是手游,所以我们也会以手游为例来进行游戏脚本的开发。大漠插件是一款针对Windows平台的鼠标键盘模拟+图文查找库, 这样我们要想实现手游脚本开发的第一步,就是下载Android模拟器,然后在对安卓模拟器进行鼠标和键盘的模拟,以此来实现自动化游戏脚本。
一、Android模拟器的选择
- 目前市面上有很多Android模拟器,比如夜神模拟器、雷电模拟器、腾讯手游助手、以及网易的木木模拟器等,这些模拟器在对手游兼容性和大漠插件的支持方面各有各的优缺点,大家可以根据具体的手游自行斟酌。
- 这里我选择的是夜神模拟器,选择其他的当然也没问题,因为原理是相同的。在选择好模拟器之后下载安装,安装成功之后打开夜神模拟器,会看到夜神模拟器的主页面,这里我已经修改了夜神模拟器的分辨率为【640*360 / dpi = 240】
二、使用大漠插件对具体的窗口进行绑定
对于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【FindWindow】找到夜神模拟器的窗口句柄,输出窗口句柄的编号
- 调用大漠插件的API【BindWindow】对找到的窗口句柄进行绑定,并输出绑定结果
三、进行鼠标模拟
在成功绑定窗口之后,我们就可以对窗口,也就是夜神模拟器为所欲为了! 这里调用大漠插件的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的位置,并触发点击,打开了应用,这样我们就初步实现了鼠标模拟点击的功能。