知识大全 “扫雷”游戏地幕后2
Posted 知
篇首语:获致幸福的不二法门是珍视你所拥有的、遗忘你所没有的。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 “扫雷”游戏地幕后2相关的知识,希望对你有一定的参考价值。
IntPtr lpBaseAddress
[In Out] byte[] buffer
UInt size
out IntPtr lpNumberOfBytesRead
);
[DllImport(\\ kernel dll\\ )] public static extern Int CloseHandle(
IntPtr hObject
);
如果你想知道在c++和c#之间有关类型转换的更多信息 我建议你从站点搜索此话题 Marshaling Data with Platform Invoke 基本上 如果你把逻辑上是正确的程序搁在那儿 它便能运行 但有时还需要一点点的调整
在声明了这些函数之后 我要做的是用一个简单的类把它们包装起来 并使用这个类 我把声明放在一个叫做ProcessMemoryReaderApi的类中 这样做更有条有理 主要的实用类称为ProcessMemoryReade 这个类有一个ReadProcess属性 它源于System Diagnostics Process类型 用于存放你要读取其内存的进程 类中有一个方法 用来以读模式打开进程
public void OpenProcess()
m_hProcess = ProcessMemoryReaderApi OpenProcess(
ProcessMemoryReaderApi PROCESS_VM_READ
(uint)m_ReadProcess Id);
PROCESS_VM_READ 常量告诉系统以读模式打开进程 而m_ReadProcess Id 声明了我要打开的是什么进程
在该类中最重要的是一个方法 它从进程中读取内存
public byte[] ReadProcessMemory(IntPtr MemoryAddress uint bytesToRead
out int bytesReaded)
byte[] buffer = new byte[bytesToRead];
IntPtr ptrBytesReaded;
ProcessMemoryReaderApi ReadProcessMemory(m_hProcess MemoryAddress buffer
bytesToRead out ptrBytesReaded);
bytesReaded = ptrBytesReaded ToInt ();
return buffer;
这个函数以所请求的大小声明一个字节数组 并使用API读取内存 就这么简单!
最后 下面这个方法关闭了进程
public void CloseHandle()
int iRetValue;
iRetValue = ProcessMemoryReaderApi CloseHandle(m_hProcess);
if (iRetValue == )
throw new Exception(\\ CloseHandle failed\\ );
第三步 – 使用类
现在轮到了有趣的部分 使用这个类就是为了读取 扫雷 的内存并揭开布雷图 要使用类 需要先对其进行初始化
ProcessMemoryReaderLib ProcessMemoryReader pReader
= new ProcessMemoryReaderLib ProcessMemoryReader();
接着 必须设置你想要读取其内存的进程 以下是如何获得 扫雷 进程的例子 这个进程一旦被装入 就被设置为ReadProcess属性
System Diagnostics Process[] myProcesses ; = System Diagnostics Process GetProcessesByName(\\ winmine\\ );
pReader ReadProcess = myProcesses[ ];
我们现在需要做的是 打开进程 读取内存 并在完成后关闭它 下面还是有关操作的例子 它读取代表布雷图宽度的地址
pReader OpenProcess();int iWidth;
byte[] memory;
memory = pReader ReadProcessMemory((IntPtr) x out bytesReaded);
iWidth = memory[ ];
pReader CloseHandle();
简单吧!
在结论部分 我列出了显示布雷图的完整代码 别忘了 我要访问的所有内存位置就是在本文第一部分中所找到位置
// 布雷图的资料管理器
System Resources ResourceManager resources = new System Resources ResourceManager(typeof(Form ));
ProcessMemoryReaderLib ProcessMemoryReader pReader
= new ProcessMemoryReaderLib ProcessMemoryReader();
System Diagnostics Process[] myProcesses
= System Diagnostics Process GetProcessesByName(\\ winmine\\ ); // 获得 扫雷 进程的第一个实列
if (myProcesses Length == )
MessageBox Show(\\ No MineSweeper process found!\\ );
return;
pReader ReadProcess = myProcesses[ ];
// 以读内存模式打开进程
pReader OpenProcess();
int bytesReaded;
int iWidth iHeight iMines;
int iIsMine;
int iCellAddress;
byte[] memory;
memory = pReader ReadProcessMemory((IntPtr) x out bytesReaded);
iWidth = memory[ ];
txtWidth Text = iWidth ToString();
memory = pReader ReadProcessMemory((IntPtr) x out bytesReaded);
iHeight = memory[ ];
txtHeight Text = iHeight ToString();
memory = pReader ReadProcessMemory((IntPtr) x out bytesReaded);
iMines = memory[ ];
txtMines Text = iMines ToString();
// 删除以前的按钮数组
this Controls Clear();
this Controls AddRange(MainControls);
// 创建一个按钮数组 用于画出布雷图的每一格
ButtonArray = new System Windows Forms Button[iWidth iHeight];
int x y;
for (y= ; y<iHeight ; y++)
for (x= ; x<iWidth ; x++)
ButtonArray[x y] = new System Windows Forms Button();
ButtonArray[x y] Location = new System Drawing Point( + x* + y* );
ButtonArray[x y] Name = \\ \\ ;
ButtonArray[x y] Size = new System Drawing Size( );
iCellAddress = ( x ) + ( * (y+ )) + (x+ );
memory = pReader ReadProcessMemory((IntPtr)iCellAddress out bytesReaded);
iIsMine = memory[ ];
if (iIsMine == x f)//如果有雷 则画出地雷位图
ButtonArray[x y] Image = ((System Drawing Bitmap)
(resources GetObject(\\ button Image\\ )));
this Controls Add(ButtonArray[x y]);
// 关闭进程句柄
pReader CloseHandle();
cha138/Article/program/net/201311/12142相关参考
<HTML><HEAD><TITLE>Javascript地雷</TITLE> <style>inputno backgroundcolor:eeeeee; border:n
恒大真正的幕后老板是谁?是许家印。许家印才是真正的草根英雄,恒大地产的成功是许家印一步一个脚印走出来的,比起前段时间传的沸沸扬扬的巨力集团的公子哥杨子,许家印的成功更具借鉴性。他的成功更多地归功于他极
Java实现扫雷(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! */ //清楚原来的方形
装有扫雷器的坦克。用于在地雷场中为坦克开辟道路。扫雷器主要有机械扫雷器和爆破扫雷器两类。机械扫雷器又分滚压式、挖掘式和打击式三种。前两种开辟车辙式通路,每侧扫雷宽度
使用扫雷、猎雷、破雷设备搜索和排除水雷的舰艇。包括扫雷舰艇、猎雷舰和破雷舰。扫雷舰艇有:舰队扫雷艇、基地扫雷舰、港海扫雷舰、扫雷母舰等,主要用于在基地、港口附近及近
对于体内的多数脏器,不管我们是否学医出身的,由于经常使用诸如肝胆相照、脑满肠肥、撕心裂肺、胃口不小、脾气大、肾气不足等词汇,或多或少知道些它们的功能或形态。惟有胰腺这个脏器,是大家不太熟悉的。这是由于
法国专门制造水下工作机器人的因泰絮德公司,1989年4月在塞纳滨海省介绍了它的第一个用于扫雷的陆地机器人。这个命名为机动操作平台250型的机器人,是一个远距离操纵的
Java扫雷算法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 建立一个雷区可以用一个一个的JB
扫雷程序(Java语言) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! importjavaaw
趣味编程:自创C#扫雷代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &