易语言制作植物大战僵尸修改器
有些人自己很想用易语言制作一个植物大战僵尸修改器,可是呢,不知道源码啊?今天,我就来教大家怎么做。
操作方法
- 01
新建一个windows窗口程序。(太简单了,跳过)
- 02
按照图给的提示,加上以下部件:10个按钮;10个滑块条;;10个编辑框;1个选择框。其他的你可以自己设置。
- 03
加入以下:(如图)
- 04
至于代码~~~看下面就行了
- 05
窗口程序集1. .版本 2 .支持库 iext .支持库 xplib .程序集 窗口程序集1 .程序集变量 pid, 整数型 .程序集变量 基址1, 整数型 .程序集变量 基址2, 整数型 .子程序 _时钟1_周期事件 pid = 进程_名取ID (“PlantsVsZombies.exe”, ) .如果 (pid = 0) 分组框1.禁止 = 真 .如果真 (分组框1.标题 ≠ “未检测到游戏进程PID,不能进行操作”) 分组框1.标题 = “未检测到游戏进程PID,不能进行操作” .如果真结束 时钟2.时钟周期 = 0 返回 () .否则 分组框1.禁止 = 假 .如果真 (分组框1.标题 ≠ “已检测到游戏进程PID,可进行操作”) 分组框1.标题 = “已检测到游戏进程PID,可进行操作” .如果真结束 时钟2.时钟周期 = 200 .如果结束 基址1 = 内存_读整数型 (pid, 进制_十六到十 (“006A9EC0”)) 基址2 = 内存_读整数型 (pid, 进制_十六到十 (“006A9F38”)) .子程序 __启动窗口_尺寸被改变 分组框1.宽度 = _启动窗口.取用户区宽度 () 分组框1.高度 = _启动窗口.取用户区高度 () .子程序 _按钮1_被单击 .局部变量 偏移1, 整数型 .如果真 (到整数 (编辑框1.内容) > 99999 或 到整数 (编辑框1.内容) < 1) 信息框 (“请输入1~99999的整数!”, 0, ) 返回 () .如果真结束 偏移1 = 内存_读整数型 (pid, 基址1 + 进制_十六到十 (“768”)) 内存_写整数型 (pid, 偏移1 + 进制_十六到十 (“5560”), 到整数 (编辑框1.内容)) .子程序 _按钮2_被单击 .局部变量 偏移1, 整数型 .如果真 (到整数 (编辑框2.内容) > 50 或 到整数 (编辑框2.内容) < 1) 信息框 (“请输入1~50的整数!”, 0, ) 返回 () .如果真结束 偏移1 = 内存_读整数型 (pid, 基址1 + 进制_十六到十 (“82C”)) 内存_写整数型 (pid, 偏移1 + 进制_十六到十 (“24”), 到整数 (编辑框2.内容)) .子程序 _编辑框2_内容被改变 .局部变量 大关卡, 整数型 .局部变量 小关卡, 整数型 小关卡 = 到整数 (编辑框2.内容) % 10 大关卡 = 到整数 (编辑框2.内容) ÷ 10 + 1 .如果真 (小关卡 = 0) 大关卡 = 到整数 (编辑框2.内容) ÷ 10 小关卡 = 10 .如果真结束 透明标签1.标题 = 到文本 (大关卡) + “-” + 到文本 (小关卡) .如果真 (到整数 (编辑框2.内容) < 1 或 到整数 (编辑框2.内容) > 50) 透明标签1.标题 = “” .如果真结束 .子程序 _按钮3_被单击 .局部变量 偏移1, 整数型 .如果真 (到整数 (编辑框3.内容) > 99999 或 到整数 (编辑框3.内容) < 1) 信息框 (“请输入1~99999的整数!”, 0, ) 返回 () .如果真结束 偏移1 = 内存_读整数型 (pid, 基址1 + 进制_十六到十 (“82C”)) 内存_写整数型 (pid, 偏移1 + 进制_十六到十 (“28”), 到整数 (编辑框3.内容)) .子程序 _编辑框3_内容被改变 透明标签2.标题 = 到文本 (到整数 (编辑框3.内容) × 10) .子程序 _时钟2_周期事件 .局部变量 偏移1, 整数型 .局部变量 计次, 整数型 .局部变量 冷却偏移, 整数型 .局部变量 冷却偏移2 .如果真 (选择框1.选中 = 真) 偏移1 = 内存_读整数型 (pid, 基址1 + 进制_十六到十 (“768”)) 内存_写整数型 (pid, 偏移1 + 进制_十六到十 (“5560”), 到整数 (编辑框1.内容)) .如果真结束 .如果真 (选择框2.选中 = 真) 冷却偏移 = 内存_读整数型 (pid, 基址1 + 进制_十六到十 (“768”)) 冷却偏移2 = 内存_读整数型 (pid, 冷却偏移 + 进制_十六到十 (“144”)) .计次循环首 (10, 计次) 内存_写整数型 (pid, 冷却偏移2 + 进制_十六到十 (“70”) + 进制_十六到十 (“50”) × (计次 - 1), 1) .计次循环尾 () .如果真结束 .子程序 _选择框1_被单击 .如果真 (到整数 (编辑框1.内容) > 99999 或 到整数 (编辑框1.内容) < 1) 信息框 (“请输入1~99999的整数!”, 0, ) 选择框1.选中 = 假 返回 () .如果真结束 .子程序 _按钮4_被单击 .局部变量 偏移1, 整数型 .局部变量 偏移2, 整数型 .如果真 (到整数 (编辑框4.内容) > 10 或 到整数 (编辑框4.内容) < 1) 信息框 (“请输入1~10的整数!”, 0, ) 返回 () .如果真结束 偏移1 = 内存_读整数型 (pid, 基址1 + 进制_十六到十 (“768”)) 偏移2 = 内存_读整数型 (pid, 偏移1 + 进制_十六到十 (“144”)) 内存_写整数型 (pid, 偏移2 + 进制_十六到十 (“24”), 到整数 (编辑框4.内容)) .子程序 _滑块条1_位置被改变 编辑框2.内容 = 到文本 (滑块条1.位置) .子程序 _滑块条2_位置被改变 编辑框1.内容 = 到文本 (滑块条2.位置) .子程序 _滑块条3_位置被改变 编辑框3.内容 = 到文本 (滑块条3.位置) .子程序 _滑块条4_位置被改变 编辑框4.内容 = 到文本 (滑块条4.位置) .子程序 _按钮5_被单击 .局部变量 偏移1, 整数型 .如果真 (到整数 (编辑框6.内容) > 10000 或 到整数 (编辑框6.内容) < 1) 信息框 (“请输入1~10000的整数!”, 0, ) 返回 () .如果真结束 偏移1 = 内存_读整数型 (pid, 基址2 + 进制_十六到十 (“82C”)) 内存_写整数型 (pid, 偏移1 + 进制_十六到十 (“1F8”), 到整数 (编辑框6.内容) + 1000) .子程序 _按钮6_被单击 .局部变量 偏移1, 整数型 .如果真 (到整数 (编辑框5.内容) > 10000 或 到整数 (编辑框5.内容) < 1) 信息框 (“请输入1~10000的整数!”, 0, ) 返回 () .如果真结束 偏移1 = 内存_读整数型 (pid, 基址2 + 进制_十六到十 (“82C”)) 内存_写整数型 (pid, 偏移1 + 进制_十六到十 (“1FC”), 到整数 (编辑框5.内容) + 1000) .子程序 _按钮7_被单击 .局部变量 偏移1, 整数型 .如果真 (到整数 (编辑框7.内容) > 10000 或 到整数 (编辑框7.内容) < 1) 信息框 (“请输入1~10000的整数!”, 0, ) 返回 () .如果真结束 偏移1 = 内存_读整数型 (pid, 基址2 + 进制_十六到十 (“82C”)) 内存_写整数型 (pid, 偏移1 + 进制_十六到十 (“228”), 到整数 (编辑框7.内容) + 1000) .子程序 _按钮8_被单击 .局部变量 偏移1, 整数型 .如果真 (到整数 (编辑框8.内容) > 10000 或 到整数 (编辑框8.内容) < 1) 信息框 (“请输入1~10000的整数!”, 0, ) 返回 () .如果真结束 偏移1 = 内存_读整数型 (pid, 基址2 + 进制_十六到十 (“82C”)) 内存_写整数型 (pid, 偏移1 + 进制_十六到十 (“230”), 到整数 (编辑框8.内容) + 1000) .子程序 __启动窗口_创建完毕 XP风格 (3) 加载皮肤 (13) .子程序 __启动窗口_将被销毁 .子程序 _关闭_被选择 销毁 () .子程序 _按钮10_被单击 .局部变量 偏移1, 整数型 .如果真 (到整数 (编辑框9.内容) > 9999 或 到整数 (编辑框9.内容) < 1) 信息框 (“请输入1~9999的整数!”, 0, ) 返回 () .如果真结束 偏移1 = 内存_读整数型 (pid, 基址2 + 进制_十六到十 (“82C”)) 内存_写整数型 (pid, 偏移1 + 进制_十六到十 (“2C”), 到整数 (编辑框9.内容)) .子程序 _按钮11_被单击 .局部变量 偏移1, 整数型 .如果真 (到整数 (编辑框10.内容) > 9999 或 到整数 (编辑框10.内容) < 1) 信息框 (“请输入1~9999的整数!”, 0, ) 返回 () .如果真结束 偏移1 = 内存_读整数型 (pid, 基址2 + 进制_十六到十 (“82C”)) 内存_写整数型 (pid, 偏移1 + 进制_十六到十 (“F4”), 到整数 (编辑框10.内容)) .子程序 _滑块条1_位置被改变 编辑框10.内容 = 到文本 (滑块条1.位置) .子程序 _启动不冷却时间种植_被选择 选择框2.选中 = 真 .子程序 _滑块条6_位置被改变 编辑框9.内容 = 到文本 (滑块条6.位置) .子程序 _滑块条10_位置被改变 编辑框6.内容 = 到文本 (滑块条10.位置) .子程序 _滑块条9_位置被改变 编辑框5.内容 = 到文本 (滑块条9.位置) .子程序 _滑块条8_位置被改变 编辑框7.内容 = 到文本 (滑块条8.位置) .子程序 _滑块条7_位置被改变 编辑框8.内容 = 到文本 (滑块条7.位置) .子程序 _分组框1_鼠标左键被按下, 逻辑型 .参数 横向位置, 整数型 .参数 纵向位置, 整数型 .参数 功能键状态, 整数型 .子程序 _选择框2_被单击
- 06
窗口程序集2. .版本 2 .程序集 窗口程序集2 .子程序 内存_写整数型, 逻辑型, 公开, 写入四字节数据(成功返回真,失败返回假) .参数 进程ID, 整数型, , 进程ID .参数 内存地址, 整数型, , 内存地址 .参数 要写入的值, 整数型, , 写入数据 .参数 写入类型, 整数型, 可空, 默认为1 0=短整数型 1=整数型 2=长整数型 .局部变量 局_进程句柄, 整数型 .局部变量 a, 整数型 .局部变量 局_长度, 整数型 .如果 (是否为空 (写入类型)) 局_长度 = 4 .否则 .判断开始 (写入类型 = 0) 局_长度 = 2 .判断 (写入类型 = 1) 局_长度 = 4 .判断 (写入类型 = 2) 局_长度 = 8 .默认 .判断结束 .如果结束 局_进程句柄 = OpenProcess (#PROCESS_ALL_ACCESS, 0, 进程ID) a = WriteProcessMemory_整数型 (局_进程句柄, 内存地址, 要写入的值, 局_长度, 0) CloseHandle (局_进程句柄) 返回 (a = 1) .子程序 内存_读整数型, 整数型, 公开, 读取整数型数据(返回整数内容 失败返回0) .参数 进程ID, 整数型 .参数 内存地址, 整数型 .局部变量 临时整数, 整数型 .局部变量 操作句柄, 整数型 操作句柄 = OpenProcess (#PROCESS_ALL_ACCESS, 0, 进程ID) ' 取得操作句柄 ReadProcessMemory_整数型 (操作句柄, 内存地址, 临时整数, 4, 0) CloseHandle (操作句柄) 返回 (临时整数) .子程序 进程_名取ID, 整数型, 公开, 通过进程名取进程ID;失败返回0 .参数 进程名, 文本型, , 取要进程ID的进程名 .参数 是否区分大小写, 逻辑型, 可空, 默认为不区分,真=区分 .局部变量 局_进程信息, 精易_进程信息列表 .局部变量 进程快照, 整数型 .局部变量 进程句柄, 整数型 进程快照 = CreateToolhelp32Snapshot (2, 0) .如果真 (进程快照 = 0) 返回 (0) .如果真结束 局_进程信息.dwSize = 512 进程句柄 = Process32First (进程快照, 局_进程信息) .判断开始 (是否区分大小写) .判断循环首 (进程句柄 ≠ 0) .如果真 (到文本 (局_进程信息.进程名称) = 进程名) CloseHandle (进程快照) 返回 (局_进程信息.进程ID) .如果真结束 进程句柄 = Process32Next (进程快照, 局_进程信息) .判断循环尾 () .默认 .判断循环首 (进程句柄 ≠ 0) .如果真 (到小写 (到文本 (局_进程信息.进程名称)) = 到小写 (进程名)) CloseHandle (进程快照) 返回 (局_进程信息.进程ID) .如果真结束 进程句柄 = Process32Next (进程快照, 局_进程信息) .判断循环尾 () .判断结束 CloseHandle (进程快照) 返回 (0) .子程序 进制_十六到十, 整数型, 公开, 将16进制文件转换到10进制数值(返回十进制数) .参数 文本, 文本型 .局部变量 i, 整数型 .局部变量 t, 文本型 .局部变量 结果, 整数型 .局部变量 局_文本, 文本型 t = “0123456789ABCDEF” 局_文本 = 到大写 (文本) .计次循环首 (取文本长度 (文本), i) 结果 = 结果 × 16 + 寻找文本 (t, 取文本中间 (局_文本, i, 1), , 假) - 1 .计次循环尾 () 返回 (结果)
- 07
DLL命令定义表 .版本 2 .DLL命令 OpenProcess, 整数型, , "OpenProcess", 公开, 打开进程 .参数 进程对象, 整数型 .参数 继承句柄, 整数型 .参数 进程标识符, 整数型 .DLL命令 WriteProcessMemory_整数型, 整数型, "kernel32.dll", "WriteProcessMemory", 公开, 内存写整数,有传址 .参数 hProcess, 整数型 .参数 内存地址, 整数型 .参数 数据指针, 整数型, 传址 .参数 数据长度, 整数型 .参数 实际写出长度, 整数型 .DLL命令 ReadProcessMemory_整数型, 整数型, "kernel32.dll", "ReadProcessMemory", 公开, 内存读整数,有传址 .参数 hProcess, 整数型 .参数 内存地址, 整数型 .参数 数据指针, 整数型, 传址 .参数 数据长度, 整数型 .参数 实际写出长度, 整数型 .DLL命令 CreateToolhelp32Snapshot, 整数型, , "CreateToolhelp32Snapshot", 公开, 创建进程快照 .参数 falg, 整数型 .参数 id, 整数型 .DLL命令 Process32Next, 整数型, , "Process32Next", 公开, 取下一个进程 .参数 h, 整数型 .参数 p, 精易_进程信息列表 .DLL命令 Process32First, 整数型, , "Process32First", 公开, 取第一个进程 .参数 h, 整数型 .参数 p, 精易_进程信息列表 .DLL命令 CloseHandle, 逻辑型, "kernel32", "CloseHandle", 公开, 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。涉及文件处理时,这个函数通常与vb的close命令相似。应尽可能的使用close,因为它支持vb的差错控制。注意这个函数使用的文件句柄与vb的文件编号是完全不同的 非零表示成功,零表示失败。会设置GetLastError .参数 对象句柄, 整数型, , 欲关闭的一个对象的句柄;