代码-QZQ)
import pymem import pymem.process import tkinter as tk from tkinter import ttk, messagebox import psutil # 帝国时代2征服者 静态基址相对于模块基址的偏移 BASE_OFFSET 0x295794 OFFSETS [0xFC, 0xA8] RESOURCES { 食物: 0x0, 木材: 0x4, 石头: 0x8, 黄金: 0xC, } class AoE2Trainer: def __init__(self, root): self.root root self.root.title(帝国时代2-征服者1.0c-资源修改器 (静态地址)) self.root.geometry(400x340) self.pm None self.module_base None self.entries {} self.setup_ui() self.detect_game() def setup_ui(self): ttk.Label(self.root, text帝国时代2征服者 资源修改器, font(SimHei, 14, bold)).pack(pady10) self.proc_var tk.StringVar(value未连接) ttk.Label(self.root, textvariableself.proc_var).pack() ttk.Button(self.root, text刷新检测, commandself.detect_game).pack(pady5) frame ttk.Frame(self.root) frame.pack(pady10) for name in RESOURCES: ttk.Label(frame, textname, width6).grid(rowlist(RESOURCES).index(name), column0, padx5, pady3) e ttk.Entry(frame, width12) e.insert(0, 99999) e.grid(rowlist(RESOURCES).index(name), column1, padx5, pady3) self.entries[name] e ttk.Button(frame, text写入, commandlambda nname: self.write(n)).grid( rowlist(RESOURCES).index(name), column2, padx5, pady3) ttk.Button(self.root, text全部写入, commandself.write_all).pack(pady10) def detect_game(self): for p in psutil.process_iter([name, pid]): if age2_x1.exe in (p.info[name] or ).lower(): self.pm pymem.Pymem(p.info[pid]) module pymem.process.module_from_name(self.pm.process_handle, age2_x1.exe) self.module_base module.lpBaseOfDll self.proc_var.set(f已连接: {p.info[name]} (基址: 0x{self.module_base:X})) return self.proc_var.set(未找到 age2_x1.exe) def get_resource_addr(self, offset): # 解析多级指针链 addr self.pm.read_int(self.module_base BASE_OFFSET) for off in OFFSETS: addr self.pm.read_int(addr off) return addr offset def write(self, name): if not self.pm: return try: addr self.get_resource_addr(RESOURCES[name]) val float(self.entries[name].get()) self.pm.write_float(addr, val) except Exception as e: messagebox.showerror(错误, str(e)) def write_all(self): for name in RESOURCES: self.write(name) messagebox.showinfo(完成, 全部资源已写入) if __name__ __main__: root tk.Tk() AoE2Trainer(root) root.mainloop()