Python自动扫雷实现方法


Posted in Python onJuly 25, 2015

本文实例讲述了Python自动扫雷实现方法。分享给大家供大家参考。具体如下:

#pyWinmineCrack.py
# coding: utf-8
import win32gui
import win32process
import win32con
import win32api
from ctypes import *
#雷区最大行列数
MAX_ROWS = 24
MAX_COLUMNS = 30
#雷区格子在窗体上的起始坐标及每个格子的宽度
MINE_BEGIN_X = 0xC
MINE_BEGIN_Y = 0x37
MINE_GRID_WIDTH = 0x10
MINE_GRID_HEIGHT = 0x10
#边框、无雷、有雷的内部表示
MINE_BOARDER = 0x10
MINE_SAFE = 0x0F
MINE_DANGER = 0x8F
#“雷区”在 扫雷程序中的存储地址
BOARD_ADDR = 0x1005340
class SMineCtrl(Structure):
 _fields_ = [("hWnd", c_uint),
  ("board", (c_byte * (MAX_COLUMNS + 2)) * (MAX_ROWS + 2)),
  ("rows", c_byte),
  ("columns", c_byte)
 ]
kernel32 = windll.LoadLibrary("kernel32.dll")
ReadProcessMemory = kernel32.ReadProcessMemory
WriteProcessMemory = kernel32.WriteProcessMemory
OpenProcess = kernel32.OpenProcess
ctrlData = SMineCtrl()
#找到扫雷程序并打开对应进程
try:
 ctrlData.hWnd = win32gui.FindWindow("扫雷", "扫雷")
except:
 win32api.MessageBox(0, "请先运行扫雷程序", "错误!", win32con.MB_ICONERROR)
 exit(0)
hreadID, processID = win32process.GetWindowThreadProcessId(ctrlData.hWnd)
hProc = OpenProcess(win32con.PROCESS_ALL_ACCESS, 0, processID)
#读取雷区数据
bytesRead = c_ulong(0)
ReadProcessMemory(hProc, BOARD_ADDR, byref(ctrlData.board), SMineCtrl.board.size, byref(bytesRead))
if(bytesRead.value != SMineCtrl.board.size):
 str = "ReadProcessMemory error, only read ", bytesRead.value, " should read ", SMineCtrl.board.size
 win32api.MessageBox(0, str, "错误!", win32con.MB_ICONERROR)
 exit()
#获取本次程序雷区的实际大小
ctrlData.rows = 0
ctrlData.columns = 0
for i in range(0, MAX_COLUMNS + 2):
 if MINE_BOARDER == ctrlData.board[0]:
 ctrlData.columns += 1
 else :
 break
ctrlData.columns -= 2 
for i in range(1, MAX_ROWS + 1):
 if MINE_BOARDER != ctrlData.board[1]:
 ctrlData.rows += 1
 else:
 break
#模拟鼠标点击动作
for i in range(0, ctrlData.rows):
 for j in range(0, ctrlData.columns):
 if MINE_SAFE == ctrlData.board[i + 1][j + 1]:
  win32api.SendMessage(ctrlData.hWnd,
   win32con.WM_LBUTTONDOWN,
   win32con.MK_LBUTTON,
   win32api.MAKELONG(MINE_BEGIN_X + MINE_GRID_WIDTH * j + MINE_GRID_WIDTH / 2,
   MINE_BEGIN_Y + MINE_GRID_HEIGHT * i + MINE_GRID_HEIGHT / 2))
win32api.SendMessage(ctrlData.hWnd,
   win32con.WM_LBUTTONUP,
win32con.MK_LBUTTON,
   win32api.MAKELONG(MINE_BEGIN_X + MINE_GRID_WIDTH * j + MINE_GRID_WIDTH / 2,
   MINE_BEGIN_Y + MINE_GRID_HEIGHT * i + MINE_GRID_HEIGHT / 2))
#搞定!
win32api.MessageBox(0, "搞定!", "信息", win32con.MB_ICONINFORMATION)

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
用python实现的可以拷贝或剪切一个文件列表中的所有文件
Apr 30 Python
python 多进程通信模块的简单实现
Feb 20 Python
Python中for循环控制语句用法实例
Jun 02 Python
python 打印出所有的对象/模块的属性(实例代码)
Sep 11 Python
windows下ipython的安装与使用详解
Oct 20 Python
深入理解Python3中的http.client模块
Mar 29 Python
Python入门_学会创建并调用函数的方法
May 16 Python
python WindowsError的错误代码详解
Jul 23 Python
Python简单计算给定某一年的某一天是星期几示例
Jun 27 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
Apr 15 Python
Python常见反爬虫机制解决方案
Jun 01 Python
Python打包exe时各种异常处理方案总结
May 18 Python
Python导出DBF文件到Excel的方法
Jul 25 #Python
Python实现的RSS阅读器实例
Jul 25 #Python
Python获取央视节目单的实现代码
Jul 25 #Python
Python实现将DOC文档转换为PDF的方法
Jul 25 #Python
将Django框架和遗留的Web应用集成的方法
Jul 24 #Python
将Python的Django框架与认证系统整合的方法
Jul 24 #Python
Django与遗留的数据库整合的方法指南
Jul 24 #Python
You might like
提高PHP编程效率的53个要点(经验小结)
2010/09/04 PHP
Yii框架form表单用法实例
2014/12/04 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
2014/12/18 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
html超链接打开窗口大小的方法
2013/03/05 Javascript
Javascript 中创建自定义对象的方法汇总
2014/12/04 Javascript
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
JS+CSS实现六级网站导航主菜单效果
2015/09/28 Javascript
AngularJS入门教程中SQL实例详解
2016/07/27 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
2016/09/20 Javascript
JavaScript之Vue.js【入门基础】
2016/12/06 Javascript
vue.js利用defineProperty实现数据的双向绑定
2017/04/28 Javascript
vue 2.x 中axios 封装的get 和post方法
2018/02/28 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
2020/05/29 jQuery
three.js着色器材质的内置变量示例详解
2020/08/16 Javascript
用Django写天气预报查询网站
2018/10/21 Python
python 正则表达式参数替换实例详解
2020/01/17 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
2020/05/25 Python
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
巴西备受欢迎的服装和生活方式品牌:FARM Rio
2020/02/04 全球购物
C#怎么让一个窗口居中显示?
2015/10/20 面试题
我的大学生活职业生涯规划
2014/01/02 职场文书
茶叶生产计划书
2014/01/10 职场文书
电脑销售顾问自荐信
2014/01/29 职场文书
青年安全生产示范岗事迹材料
2014/05/04 职场文书
学习十八大的心得体会
2014/09/01 职场文书
工作证明英文模板
2014/10/21 职场文书
搬迁通知
2015/04/20 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
初中政治教学反思
2016/02/23 职场文书
关于食品安全的演讲稿范文(三篇)
2019/10/21 职场文书
MYSQL(电话号码,身份证)数据脱敏的实现
2021/05/28 MySQL