|

.版本 2
.支持库 EThread
.支持库 spec
.程序集 窗口程序集_启动窗口
.程序集变量 handle, 整数型
.程序集变量 pid
.程序集变量 threadhandlq
.子程序 __启动窗口_创建完毕
pid = 进程_名取ID (“PlantsVsZombies.exe”)
handle = 进程_打开1 (pid)
.子程序 _按钮1_被单击
.局部变量 基址1
.局部变量 基址2
基址1 = 内存.读整数 (pid, 进制_十六到十 (“00199178”))
基址2 = 内存.读整数 (pid, 基址1 + 进制_十六到十 (“5578”))
内存.写整数 (pid, 基址1 + 进制_十六到十 (“5578”), 600)
.子程序 _按钮2_被单击
.局部变量 模块地址
.局部变量 地址1
.局部变量 地址2
.局部变量 地址3
.局部变量 地址4
.局部变量 地址5
.局部变量 地址6
.局部变量 值
模块地址 = 取模块句柄ex (pid, “PlantsVsZombies.exe”)
地址1 = 内存.读整数 (pid, 模块地址 + 673328)
地址2 = 内存.读整数 (pid, 地址1 + 220)
地址3 = 内存.读整数 (pid, 地址2 + 252)
地址4 = 内存.读整数 (pid, 地址3 + 4)
地址5 = 内存.读整数 (pid, 地址4 + 348)
地址6 = 地址5 + 192
值 = 内存.读整数 (pid, 地址6)
启动线程 (&锁定冷却, 地址6, threadhandlq)
' 这个启动线程 就是 调用子程序跟这样写 差不多 但是 启动线程 他会让这个子程序 从新启动一个县城来运行 如果直接调用 而不是启动线程的话 启动县城 主程序就不会卡死 支线程在死循环而已
' 最后一个偏移+50就是下一个
调试输出 (值)
' "PlantsVsZombies.exe"+000A4630+dc+fc+4+15c+c0
.子程序 锁定冷却
.参数 地址
.判断循环首 (真) ' 死循环 这个知道吧知道如果我们在主进程上死循环 窗口不久卡死了 我们死循环 一直给冷却写1 这样才能保证冷却一直都是1 CE也差不多这个原理
内存.写整数 (pid, 地址, 1)
内存.写整数 (pid, 地址 - 80, 1)
内存.写整数 (pid, 地址 + 80, 1)
内存.写整数 (pid, 地址 + 160, 1)
Sleep (20) ' 这里睡20毫秒 太快的话吃CPU所以 让他暂停20毫秒 1秒=1000毫秒
.判断循环尾 ()
.子程序 _按钮3_被单击
线程_销毁 (threadhandlq)
R><BR>[/e] |
|