本文实例讲述了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自动扫雷实现方法相关推荐

  1. python扫雷脚本_Python自动扫雷实现方法

    本文实例讲述了Python自动扫雷实现方法.分享给大家供大家参考.具体如下: #pyWinmineCrack.py # coding: utf-8 import win32gui import win ...

  2. python写简单脚本_python写一个最简单的可执行脚本

    这周一直在折腾一个很常见的需求.打算做成脚本和批处理,将策划从人肉手工和低效中解救出来. 尝试了windows下cmd的批处理.linux shell脚本.实则是多位程序员和我讲,为什么不用pytho ...

  3. python找人脚本_python 自动刷人气脚本

    公司安总让小弟做多人模拟绑定,于是就有了下文,非常简单,可以改下url做自动刷人气脚本 代码如下,请不要见笑 #-*- coding:utf-8 -*- import requests, json, ...

  4. python 交换机巡检脚本_Python自动巡检H3C交换机实现过程解析

    1.通过netmiko模块登录交换机,协议ssh,执行收集信息命令,保存至txt文件 2.过滤txt文件中的内容,保存到excel,使用xlwt模块实现. 3.sendmai发送excel邮件.或者发 ...

  5. python写传奇脚本_python – 如何将图形传奇带到前面?

    我有一系列子图,其中每个子图都有一个图例,我希望在每个子图之外与相邻的子图重叠.问题在于,传说是在自己的情节"顶部",但低于邻近的情节.传说不会将zorder作为参数,所以我不确定 ...

  6. python写魔兽世界脚本_用python bat写软件安装脚本 + HM NIS Edit自动生成软件安装脚本...

    2019-03-11更新:原来NSIS脚本也可以禁用64位文件操作重定向的! 1.在安装脚本的开始处定义 LIBRARY_X64. !include "MUI.nsh" !incl ...

  7. unity应用实例——扫雷游戏(自动扫雷、人工布雷)

    最近用Unity做了一个简单的扫雷小游戏,可以实现电脑自动扫雷.人工布雷等功能,效果图如下. 在游戏的任何时间按下T键后,电脑会自动进行游戏,直到游戏结束.按下B键后可以通过鼠标点击埋雷. 项目一共有 ...

  8. mysql备份到制定目录_写一个脚本定时自动备份mysql到指定目录

    编写一个shell脚本每天16:30备份mysql数据并压缩打包(打包文件按照当天的日期命名)放到/root/data #cd /root #vim mysqlbackup.sh #!/bin/bas ...

  9. 用python写自动化测试脚本常用功能:结果记录,运行日志,测试配置,带颜色打印在控制台

    用python写自动化测试脚本常用功能:结果记录,运行日志,测试配置,带颜色打印在控制台 利用csv库来记录测试结果 利用logging库来记录脚本运行信息 利用ConfigParser库来读取测试配 ...

最新文章

  1. 学习NGUI前的准备NGUI的相关信息
  2. 手机和工业计算机运算能力对比,手机CPU跟电脑CPU到底差多少?
  3. 2021-04-11面试
  4. V4L2学习 二 ----视频打开与保存简单流程
  5. tcpdump抓包分析具体解释
  6. go java jsonrpc_使用golang 实现JSON-RPC2.0
  7. Linux中fasttext安装
  8. cad2019菜单栏怎么调出来_AutoCAD2019工具栏如何调出?工具栏调出方法图文推荐
  9. 计算机上怎么在表格输入分秒,“excel表格怎么输入角度“excel 表格中怎么输入分秒的符号...
  10. Python穷举法连接WiFi
  11. 多模块项目提示“Module ** must not contain source root **. The root already belongs to module **”的解决办法
  12. 如何看计算机几核,如何查看电脑CPU是几核的?,这几步你要了解
  13. 使用Ajax实现百度下拉框
  14. Java基础篇--面向对象(Object Oriented)
  15. linux下卸载软件命令行,如何使用Linux中的命令行卸载软件 | MOS86
  16. 以太坊导以太坊导_以太坊网络钓鱼诈骗在Facebook上的剖析
  17. 应用统计432考研复试提问总结精简版【二】
  18. seo关键词选择-SEO关键词选择分析软件
  19. Oracle Apps(EBS)模块名称 SAP模块名称
  20. windows操作系统没有设置密码安全策略引发的威胁

热门文章

  1. php mysql 分类_php+mysql实现无限分类实例详解
  2. vs release 调试 路径设置
  3. pytorch dataloader加速
  4. pyqt设置按钮可用
  5. python OrderedDict 详解
  6. WinError 145] 目录不是空的
  7. JPEG压缩原理与DCT离散余弦变换 量化
  8. c语言实现程序只执行一次,请问大家,为什么我调用我定义的函数俩次,但是程序只执行一次...
  9. python 参数个数 同名函数_如何在python中编写不同参数的同名方法
  10. mysql释放练级_面试官:谈谈Mysql事务隔离级别?