python语言-连连看3.5完全版-KawaiQQ.EXE-修改器 v1.0代码-QZQ

发布时间:2026/10/2 12:58:33

python语言-连连看3.5完全版-KawaiQQ.EXE-修改器 v1.0代码-QZQ import pymem import pymem.process import tkinter as tk from tkinter import ttk, messagebox import threading import time # 配置区 PROCESS_NAME KawaiQQ.EXE OFFSET_HINT 0xA3194 # 提示数量 WORD OFFSET_LIFE 0xA30D4 # 生命值 WORD OFFSET_SCORE 0xA3134 # 分数 FLOAT OFFSET_TIME 0xA3148 # 时间条 FLOAT ← 越小时间越长 # 时间条换算输入 1~100 的档位内部映射到内存值 # 档位 100 → 内存 1.0 → 时间条最长 # 档位 1 → 内存 100 → 时间条较短 def ui_to_mem_time(ui_value): ui_value max(1.0, min(100.0, float(ui_value))) return 101.0 - ui_value def mem_to_ui_time(mem_value): 内存值反向显示成档位方便直观 try: v float(mem_value) ui 101.0 - v return max(1.0, min(100.0, ui)) except Exception: return 0.0 # 内存操作核心 class LLKModifier: def __init__(self): self.pm None self.base None self.locked {} self.lock_thread None self.running False def attach(self): try: self.pm pymem.Pymem(PROCESS_NAME) module pymem.process.module_from_name( self.pm.process_handle, PROCESS_NAME ) self.base module.lpBaseOfDll return True, f附加成功基址: 0x{self.base:X} except Exception as e: self.pm None self.base None return False, f附加失败: {e} def is_attached(self): return self.pm is not None and self.base is not None def read_int(self, addr): return self.pm.read_int(addr) def write_int(self, addr, v): self.pm.write_int(addr, v) def read_word(self, addr): return self.pm.read_short(addr) def write_word(self, addr, v): self.pm.write_short(addr, v) def read_float(self, addr): return self.pm.read_float(addr) def write_float(self, addr, v): self.pm.write_float(addr, v) def get_hint_addr(self): return self.base OFFSET_HINT def get_life_addr(self): return self.base OFFSET_LIFE def get_score_addr(self): return self.base OFFSET_SCORE def get_time_addr(self): return self.base OFFSET_TIME def read_hint(self): return self.read_word(self.get_hint_addr()) def read_life(self): return self.read_word(self.get_life_addr()) def read_score(self): return self.read_float(self.get_score_addr()) def read_time(self): return self.read_float(self.get_time_addr()) def write_hint(self, v): self.write_word(self.get_hint_addr(), v 0xFFFF) def write_life(self, v): self.write_word(self.get_life_addr(), v 0xFFFF) def write_score(self, v): self.write_float(self.get_score_addr(), float(v)) def write_time(self, v): self.write_float(self.get_time_addr(), float(v)) def start_lock(self): if self.running: return self.running True self.lock_thread threading.Thread(targetself._lock_loop, daemonTrue) self.lock_thread.start() def stop_lock(self): self.running False def _lock_loop(self): while self.running: if self.is_attached(): for addr, (value, dtype) in list(self.locked.items()): try: if dtype int: self.write_int(addr, value) elif dtype word: self.write_word(addr, value) elif dtype float: self.write_float(addr, value) except Exception: pass time.sleep(0.05) def set_lock(self, addr, value, dtypeint): self.locked[addr] (value, dtype) def remove_lock(self, addr): self.locked.pop(addr, None) def clear_locks(self): self.locked.clear() # GUI class ModifierGUI: def __init__(self, root): self.root root self.root.title(连连看3.5完全版-KawaiQQ.EXE-修改器 v1.0) self.root.geometry(600x660) self.root.resizable(False, False) self.mod LLKModifier() self._build_ui() self._auto_attach() def _build_ui(self): # 进程状态 top ttk.LabelFrame(self.root, text进程状态, padding10) top.pack(fillx, padx10, pady5) self.status_var tk.StringVar(value未附加) ttk.Label(top, textvariableself.status_var, foregroundred).pack(sideleft) ttk.Button(top, text附加游戏, commandself._auto_attach).pack(sideright) ttk.Button(top, text刷新, commandself.refresh_values).pack(sideright, padx5) # 提示 / 生命 / 分数 self._make_row(提示数量 (WORD A3194), hint, 9999) self._make_row(生命值 (WORD A30D4), life, 9999) self._make_row(分数 (FLOAT A3134), score, 999999.0) # ---------- 时间条特殊反向 ---------- time_frame ttk.LabelFrame( self.root, text时间条 (FLOAT A3148) ★ 档位越大 时间越长 ★, padding10 ) time_frame.pack(fillx, padx10, pady4) ttk.Label(time_frame, text当前档位:).grid(row0, column0, stickyw) self.time_var tk.StringVar(value--) ttk.Label(time_frame, textvariableself.time_var, width14, foregroundblue).grid(row0, column1, stickyw) ttk.Label(time_frame, text设为档位 (1~100):).grid( row0, column2, stickyw, padx(20, 0)) self.time_entry ttk.Entry(time_frame, width12) self.time_entry.insert(0, 100) self.time_entry.grid(row0, column3, stickyw) ttk.Button(time_frame, text写入, commandself.do_write_time).grid(row0, column4, padx5) self.time_lock_var tk.BooleanVar() ttk.Checkbutton(time_frame, text锁定, variableself.time_lock_var, commandself.do_lock_time).grid(row0, column5, padx5) # 快捷按钮 quick ttk.Frame(time_frame) quick.grid(row1, column0, columnspan6, pady6, stickyw) ttk.Label(quick, text快捷:).pack(sideleft) for label, val in [(较短 30, 30), (中等 60, 60), (较长 90, 90), (最长 100, 100)]: ttk.Button(quick, textlabel, width8, commandlambda vval: self._set_time_quick(v)).pack(sideleft, padx3) # 日志 log_frame ttk.LabelFrame(self.root, text日志, padding5) log_frame.pack(fillboth, expandTrue, padx10, pady5) self.log_text tk.Text(log_frame, height8, statedisabled) self.log_text.pack(fillboth, expandTrue) # 底部 bottom ttk.Frame(self.root) bottom.pack(fillx, padx10, pady5) ttk.Button(bottom, text全部锁定, commandself.start_all_lock).pack(sideleft) ttk.Button(bottom, text全部解锁, commandself.stop_all_lock).pack(sideleft, padx5) ttk.Button(bottom, text退出, commandself.root.quit).pack(sideright) def _make_row(self, title, name, default): frame ttk.LabelFrame(self.root, texttitle, padding10) frame.pack(fillx, padx10, pady4) ttk.Label(frame, text当前:).grid(row0, column0, stickyw) val_var tk.StringVar(value--) ttk.Label(frame, textvariableval_var, width14, foregroundblue).grid( row0, column1, stickyw) ttk.Label(frame, text设为:).grid(row0, column2, stickyw, padx(20, 0)) entry ttk.Entry(frame, width12) entry.insert(0, default) entry.grid(row0, column3, stickyw) ttk.Button(frame, text写入, commandlambda: self.do_write(name)).grid(row0, column4, padx5) lock_var tk.BooleanVar() ttk.Checkbutton(frame, text锁定, variablelock_var, commandlambda: self.do_lock(name)).grid(row0, column5, padx5) setattr(self, f{name}_var, val_var) setattr(self, f{name}_entry, entry) setattr(self, f{name}_lock_var, lock_var) # 逻辑 def log(self, msg): self.log_text.config(statenormal) self.log_text.insert(end, f[{time.strftime(%H:%M:%S)}] {msg}\n) self.log_text.see(end) self.log_text.config(statedisabled) def _auto_attach(self): def worker(): ok, msg self.mod.attach() if ok: self.status_var.set(f已附加 基址:0x{self.mod.base:X}) self.log(msg) self.mod.start_lock() self.refresh_values() else: self.status_var.set(未附加) self.log(msg) threading.Thread(targetworker, daemonTrue).start() def refresh_values(self): if not self.mod.is_attached(): return try: self.hint_var.set(str(self.mod.read_hint())) except Exception: self.hint_var.set(--) try: self.life_var.set(str(self.mod.read_life())) except Exception: self.life_var.set(--) try: self.score_var.set(f{self.mod.read_score():.2f}) except Exception: self.score_var.set(--) # 时间条把内存值换算成档位显示 try: mem self.mod.read_time() ui mem_to_ui_time(mem) self.time_var.set(f{ui:.1f} (内存{mem:.1f})) except Exception: self.time_var.set(--) def _check(self): if not self.mod.is_attached(): messagebox.showwarning(警告, 请先附加游戏) return False return True def do_write(self, name): if not self._check(): return entry getattr(self, f{name}_entry) try: if name in (hint, life): val int(entry.get()) getattr(self.mod, fwrite_{name})(val) else: val float(entry.get()) getattr(self.mod, fwrite_{name})(val) self.log(f{name} → {val}) self.refresh_values() except Exception as e: messagebox.showerror(错误, str(e)) def do_lock(self, name): if not self.mod.is_attached(): return lock_var getattr(self, f{name}_lock_var) entry getattr(self, f{name}_entry) addr getattr(self.mod, fget_{name}_addr)() if lock_var.get(): try: if name in (hint, life): val int(entry.get()) dtype word else: val float(entry.get()) dtype float self.mod.set_lock(addr, val, dtype) self.log(f锁定 {name} {val}) except Exception: pass else: self.mod.remove_lock(addr) self.log(f解锁 {name}) # ---------- 时间条专用反向换算 ---------- def _set_time_quick(self, ui_value): self.time_entry.delete(0, end) self.time_entry.insert(0, str(ui_value)) self.do_write_time() def do_write_time(self): if not self._check(): return try: ui_val float(self.time_entry.get()) mem_val ui_to_mem_time(ui_val) self.mod.write_time(mem_val) self.log(f时间条 档位{ui_val:.0f} → 内存{mem_val:.1f} (越大越久)) self.refresh_values() except Exception as e: messagebox.showerror(错误, str(e)) def do_lock_time(self): if not self.mod.is_attached(): return addr self.mod.get_time_addr() if self.time_lock_var.get(): try: ui_val float(self.time_entry.get()) mem_val ui_to_mem_time(ui_val) self.mod.set_lock(addr, mem_val, float) self.log(f锁定时间条 档位{ui_val:.0f} → 内存{mem_val:.1f}) except Exception: pass else: self.mod.remove_lock(addr) self.log(解锁时间条) def start_all_lock(self): if not self._check(): return for name in (hint, life, score): getattr(self, f{name}_lock_var).set(True) self.do_lock(name) self.time_lock_var.set(True) self.do_lock_time() self.log( 全部锁定 ) def stop_all_lock(self): for name in (hint, life, score): getattr(self, f{name}_lock_var).set(False) self.do_lock(name) self.time_lock_var.set(False) self.do_lock_time() self.mod.clear_locks() self.log( 全部解锁 ) if __name__ __main__: root tk.Tk() app ModifierGUI(root) root.mainloop()
延伸阅读

更多相关文章

2026/10/2 12:58:33

C语言进阶--回顾(03)

(第三篇) 目录 3.4移位操作符 3.4.1左移操作符 3.4.2右移操作符 3.5 位操作符 3.5.1 & 3.5.2 | 3.5.2 ~ 3.5.4 ^ 3.5.5 练习 3.5.6 练习2 3.5.7 练习3 3.5.8模拟权限控制实现 3.4移位操作符 3.4.1左移操作符 (a&#…

2026/10/2 12:58:33

漫剧台词贴合分镜的逐镜写法对照实例与量化基准

有哪些具体的例子可以说明漫剧台词贴合分镜的创作方法?核心原则是先定分镜画面、景别和时长,再写台词,让台词长度和情绪完全匹配画面信息量。特种猫平台上的实操案例显示,创作者最常踩的坑有4个:特写镜头塞长台词导致字…

2026/10/2 12:58:33

单视频三维重构在口岸、港区突发事件平战切换中的应用

摘要口岸与港区作为跨境物流、人员通关、货物集散的核心枢纽,具备平战状态差异大、作业要素密集、多部门联动复杂、风险跨界耦合、应急容错率极低的典型特征。常态运维阶段,港区以通关查验、船舶靠泊、货物装卸、车流人流疏导为核心,追求高效…

2026/10/2 13:58:37

Token命中率:LLM推理的“隐形加速器”

一、Token命中率到底是什么?1.1 从KV Cache说起LLM以自回归方式生成文本:每生成一个新Token,都需要“回头看”前面所有Token的Key和Value张量来计算注意力。如果每次生成都重新计算全部历史Token的K/V,计算量会随序列长度线性增长…

2026/10/2 13:58:37

(132页PPT)精益生产现场管理和改善(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 https://download.csdn.net/download/AI_data_cloud/88338604 资料解读:精益生产现场管理和改善 详细资料请看本解读文章的最后内容。 这份精益生产现场管理与改善的专业资料&#…

2026/10/2 13:53:36

【第2 章】WorkBuddy 从入门到高手

WorkBuddy 从入门到高手(第 2章):核心能力,办公六件套全拆解(超详细案例版) 这是一套面向「完全没用过 WorkBuddy」读者的系统学习路线,总共 7 章。本文是第 3 章。 系列目录:第 0 章…

2026/10/2 8:16:46

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/10/1 17:09:46

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 10:48:55

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/2 0:02:57

PWN入门:从栈溢出原理到ROP链实战

1. 这不是“学PWN”,是重新理解你每天敲的每一行C代码我第一次在CTF赛场上写出能控制程序流的exp时,手抖得连gdb的c命令都输错三次。那道题只有23行C代码,一个gets()调用,一个printf(),一个return——它甚至没开NX&…

2026/10/2 0:02:57

Windows下cudaMallocHost显存占用之谜:WDDM与TCC模式差异及优化方案

1. 一个反直觉的显存占用现象第一次在 Windows 上看到cudaMallocHost把显存吃掉的时候,我的反应是打开任务管理器反复确认了三遍。明明调用的是主机端锁页内存分配,按 CUDA 文档的说法,这块内存应该落在系统 RAM 里,跟 GPU 的显存…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑