)
一、问题背景最近在使用老版 VisualBoyAdvance 1.8.0 beta VisualBoyAdvance1.8.0汉化版玩 GBA 游戏时遇到了一个比较烦的问题。VBA 默认把 Space 设置成了加速键但它的加速并不是固定 2 倍、4 倍而是直接解除速度限制。结果就是正常运行时100% 左右一按 Space直接冲到 3000%~10000%游戏瞬间快到完全没法控制VBA 菜单里虽然有25%、50%、100%、150%、200%、其它这些速度设置但它们控制的是正常运行速度并不能限制 Space 的加速倍率。一开始我考虑换成 VBA-M因为 VBA-M 对 Turbo / Speedup 的控制更完善。但问题又来了PokemonMemHack 无法正常访问 VBA-M 的内存。而老版 VisualBoyAdvance 1.8 却可以正常配合 PokemonMemHack 使用。所以我就想保留 VisualBoyAdvance 1.8继续兼容 PokemonMemHack同时把 Space 加速改成固定倍率。二、最终效果我最后做了一个小脚本工具效果如下平时运行VBA 保持“不调节”按住 Space进入用户设定的加速倍率松开 Space自动恢复“不调节”可以自己设置 200%、300%、400%、500% 等倍率不会弹出 VBA 的“其它速度”输入框不修改 ROM不需要更换 VBA兼容原来的 PokemonMemHack 使用环境支持开机自动启动程序常驻系统托盘再次双击程序可以重新修改加速倍率例如设置400效果就是平时不调节按住 Space400%松开 Space恢复不调节三、为什么“100%”和“不调节”不一样这个问题比较容易误解。一开始我也以为100% 不调节。但实际使用发现并不是。在 VBA 1.8 中不调节和 100% 属于两种不同的运行状态。100% 是明确启用了 throttle 限速而“不调节”不会强制进入这个限速模式。在我使用的 VBA 1.8 中文版中100% 状态下画面和声音会有轻微卡顿而“不调节”状态下明显更流畅。所以最终脚本没有采用Space 松开 → 100%而是Space 松开 → 不调节。这个细节很重要。四、实现思路VisualBoyAdvance 1.8 本身是支持自定义 throttle 数值的。问题只是它的 Space 加速键走的是自己的 Speedup 逻辑而不是普通的 throttle。所以解决方案不是模拟按键打开菜单而是找到 VBA 进程中的 throttle 变量按住 Space 时直接把 throttle 改成用户设置的倍率松开 Space 后调用 VBA 的“不调节”菜单命令例如按下 Space → throttle 400松开 Space → 恢复“不调节”为了找到 throttle 地址程序启动后会短暂切换几个已知速度200% → 25% → 150% → 50% → 200% → 100%然后根据这些变化筛选出真正的 throttle 内存地址。筛选完成后再恢复到“不调节”。这一步只会在 VBA 每次重新启动后初始化一次。五、使用方法1. 准备环境本工具针对的是VisualBoyAdvance 1.8.0 beta。我使用的中文版程序名为VisualBoyAdvance(1.8CN).exe。如果你的 VBA 文件名不同需要修改源码中的global VBAWindow : ahk_exe VisualBoyAdvance(1.8CN).exe2. 运行工具运行VBA1.8CN_FixedTurbo.exe会弹出设置窗口。输入想要的倍率例如400代表400% ≈ 4倍速。可以参考200 2倍速300 3倍速400 4倍速500 5倍速600 6倍速我个人比较推荐300~500这个范围比较适合宝可梦走路、刷怪、过对话。3. 开机自动启动设置窗口中可以勾选开机自动启动。勾选后程序会随 Windows 登录自动启动并静默常驻托盘。以后不需要每次打开 VBA 时手动运行工具。程序会自动等待 VBA 启动。4. 修改倍率如果以后想把400% 改成600%直接再次双击VBA1.8CN_FixedTurbo.exe 即可。如果程序已经在后台运行不会重新启动第二个实例而是直接弹出原来的设置窗口。也可以通过右下角系统托盘VBA Fixed Turbo → 修改加速倍率进行修改。六、重要说明1. 这个工具会访问 VBA 进程内存实现过程中使用了OpenProcess、ReadProcessMemory、WriteProcessMemory所以部分杀毒软件可能会误报。这类 API 本身并不代表恶意程序但因为很多修改器、调试器也会用到所以安全软件可能会比较敏感。建议同时提供 .ahk 源码用户可以自行检查源码也可以自行使用 AutoHotkey v2 编译。2. 不建议随便用于其他 VBA 版本这个工具目前是针对VisualBoyAdvance 1.8CN 做的。VBA-M、VBA Link、其他重新编译版本的进程名、内存布局、菜单命令 ID 都可能不同。因此不保证可以直接使用。3. 如果 VBA 以管理员身份运行工具也需要使用管理员权限。否则可能会出现无法访问 VBA 进程内存。这属于 Windows 权限限制。七、为什么不直接使用 VBA-M理论上 VBA-M 的加速功能更完善也可以更方便地设置 Turbo。但我这里有一个特殊需求需要使用 PokemonMemHack。PokemonMemHack 可以正常访问老版 VisualBoyAdvance 1.8 的内存但在 VBA-M 中会出现无法访问 VBA 内存的问题。所以才选择继续保留老版 VBA并通过外部工具解决固定倍率加速问题。如果你不需要 PokemonMemHack其实直接使用 VBA-M 会更加省事。八、源码和工具下载1 链接: https://pan.baidu.com/s/1kn2_UFreBORcQBtz9wwqLA?pwdr36n 提取码: r36n2 https://github.com/ZHLmvp/VBA-Script两个链接都能用把.exe文件下载下来就可以了其中.exe普通用户直接运行.ahk源码方便检查和自行修改。如果只想修改默认倍率也可以直接修改源码中的倍率设置。九、总结这个问题最终的核心不是“VBA 不能加速”而是VisualBoyAdvance 1.8 的 Space Speedup 默认属于近似无限速模式并没有提供独立的固定倍率设置。最终通过 AutoHotkey监听 Space 定位 throttle 内存变量 直接写入倍率 松开后恢复“不调节”就可以实现正常不调节按住 Space固定 400%松开不调节既保留了老版 VBA也不会影响原来的 PokemonMemHack 使用。如果你遇到的也是VBA 一按 Space 就 8000%~10000%而且又因为 PokemonMemHack 不能换 VBA-M这个方法应该会比较适合。