# 会话控制与全局快捷键 2026-10-27 当前会话进入要求新鲜原生 `InGame`,并核对本次 `LoadGame` 之后的真实地点与可靠货舱;进程存在、接口 `ready` 或旧 Journal 均不能代表入舱。显式站点航程可从已确认主菜单接续原会话,普通打开工具箱不会自行进入。仅连续确认的原版连接失败且无实时驾驶场景时执行有界恢复,人工停止、身份异常和未知菜单不参与自动重启;交易继续保留原操作号与回执。实现及验证范围见 [当前恢复说明](SCO-EXIT-AND-SESSION-RECOVERY-20261027.md)。下文保留历史版本当时的状态与证据,不作为当前版本已通过实机验收的声明。 ## 启动游戏 0.4.14 在主页顶部提供“启动游戏”。使用游戏插件设置中的主程序路径(首次使用会自动发现 Steam 安装),核对同一安装目录的 `EDLaunch.exe`,通过现有官方启动参数以 `/novr` 桌面模式启动。启动请求和重启共用单操作门禁及取消入口,但启动流程不调用进程终止。游戏已经运行时只显示状态,不重复打开游戏或启动器;验证及实际提交启动之间会再次检查是否出现游戏实例。 启动后等待同一游戏 EXE 路径的进程确认,超时显示启动器登录或更新提示。主页直接显示操作进度;测试使用模拟会话驱动验证启动、已运行、缺失启动器、取消、重复点击和错误安装路径,未为此启动、退出或重启正在游玩的游戏。 ## 一键大退 主页按钮或已启用的全局快捷键触发。先识别唯一标准游戏实例,再核对 PID、启动时间、完整 EXE 路径和进程名称。确认同一安装目录的官方启动器存在后,调用 `Process.Kill(entireProcessTree: false)` 直接结束选定游戏进程。等待其退出,再启动同一安装目录的官方启动器,并等待同一 EXE 路径的新游戏进程作为成功证据。超时不会当作已重启成功。 官方启动器有单实例互斥锁,因此游戏退出后会请求同一安装目录已有的 EDLaunch 正常关闭,最多等待 15 秒;不接受关闭则停止后续操作。重新启动采用本机启动器已静态确认的 `/autorun /autoquit /novr /select odyssey`(或 horizons)。`/novr` 由官方 `FORCManager` 解析并传给游戏,明确以桌面模式启动。 Steam 安装使用同目录官方启动器的 `/Steam`,仅向这个子进程提供 `SteamAppId=359320` 和 `SteamGameId=359320`,认证和新票据仍由官方 Steam API 与启动器处理。早期直接 `/Steam` 而缺少应用环境时曾停在未认证状态;随后通过 `-applaunch` 验证过启动,但连续实测中 Steam 会因旧游戏尚未清理而拒绝重启。2026-10-21 的 0.2.7 至 0.2.9 实测改为带应用环境的官方启动器,取得新 PID 并正常登录;0.2.9 的游戏命令行已独立确认包含 `/novr` 且不含 `/vr`。工具不复制或保存原游戏认证参数,也不修改全局环境变量。结束游戏前仍检查 Steam 安装路径。 启动器参数依据本机 `ClientSupport.FORCManager.ProcessCommandLine`、`CBViewModel.CobraBayView.ProcessCommandLine/AutoRun`;反编译记录在 `artifacts/reference-toolbox/launcher/`。该实现不依赖屏幕、菜单文字、游戏窗口焦点或分辨率。此前 OCR/鼠标菜单实现已删除。 同一时间只允许一个会话操作;工具箱路线正在执行时不能重启。取消会停止后续等待和启动,已经结束的进程无法撤销。早期仅验证模拟驱动;用户随后授权退出,实际 D 盘进程已结束并由 Steam/官方启动器重新启动。启动对照核对了新 PID、完整路径和持续存活时间,未调用原生重进或飞行指令。两次启动崩溃的记录见 CRASH-20261021.md。 ## 一键重进 2026-10-23 接入原生重进流程:应用端通过有租约的菜单 IPC 进入游戏原本的 `PrePauseMenu`,读取实际暂停菜单的可用按钮,返回主菜单后经 `ContinueMenu` 重新进入原来的单人或公开模式。运行期间原按钮显示“取消”;取消停止后续菜单操作,已到达的游戏界面保留。私人群组的选择流程仍未接入,入口会明确说明并禁用。 主页按已加载插件的 `supportsRelog` 能力及当前游戏模式启用按钮;旧插件会显示需要更新的原因,不再显示固定的“接口验证中”。快捷键复用同一工作流。当前游戏进程不被终止,不调用启动器,不模拟键鼠。新插件需在游戏正常退出后更新,下次启动时加载。 0.4.6-dev 曾修正重进包与旧导航包都标为 0.4.5-dev 的发布混淆,当时使用统一的原生版本头。C#迁移后版本及游戏哈希统一读取 `native/ManagedPlugin/Platform.cs`,旧版本头已删除。正在运行的旧游戏仍需正常退出后安装 / 更新,再次启动才能加载新版;仅更新客户端安装包不改变游戏内已加载的模块。 原生接入区分主菜单和暂停菜单:`0x481A3A0 / 0x4838BA0` 与 `0x481A920 / 0x4838BF0`,两种布局分别读取。按钮必须通过实际定义、缓存一致性和原始 `0x0101` 可用标记;暂停退出确认还等待 `activity+0x164` 的原始倒计时结束。仅在游戏拥有线程执行原始选择函数;请求有序列、期限、所有者和请求 ID,同一个 ID 不重复选择菜单。重新进入必须同时看到稳定的 `InGame` 原生状态及同一指挥官的新 `LoadGame` 事件。 证据:`artifacts/relog-20261023/` 保存固定构建的只读反编译、模拟流程测试和原生合成结构测试;`work/visual/relog/` 保存离线按钮启用、取消及实际 XAML 绑定检查。尚未向正在运行的游戏发送重进请求,真实游戏完整重进验收仍待进行;不能把离线检查记作实机通过。 对当前 EXE(SHA-256 `6891f70a021fa9f3a0e00458c284f48d1226e68ae7fc02ad48081aed47857e93`)完成了纯磁盘分析:`Confirmed Quit To Main Menu` / `Confirmed Quit Game` 的交叉引用落在函数区域 RVA `0x1D5F64A`。旧隔离副本的 GameUpdate 和 menuAction 掩码签名在当前映像分别命中 `0x2157520`、`0x4838BA0`;原 named flow action 没有唯一签名结果。这些均为候选证据,不构成可调用 ABI,不复用旧版偏移到在线进程。记录在 `current-session-xrefs.json` 和 `session-function-candidates.json`。 ## 全局快捷键 入口:设置 → 全局快捷键。默认关闭;预填重进 `Ctrl+Alt+F9`、大退 `Ctrl+Alt+F10`。用户启用并保存成功后才注册。可分别修改,留空取消单个绑定,启用开关控制全部绑定。旧版本默认关闭且两个绑定均为空的设置会迁移为这组默认值;新版主动清空的绑定会保留。 支持 Ctrl、Alt、Shift 搭配 A–Z、0–9、F1–F24,至少含 Ctrl 或 Alt;F12 按 Windows 规定保留给调试器。采用 [`RegisterHotKey`](https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-registerhotkey) 和 `MOD_NOREPEAT`;仅对工具箱自己的窗口安装消息回调。工具箱在后台也能接收。重复绑定、被其他程序占用、无效格式会显示原因,并保留先前有效绑定;调换两项快捷键可直接完成。关闭工具箱时注销。 隐藏窗口检查可以注册一个临时测试组合、仅向工具箱自身窗口投递 WM_HOTKEY 到计数回调,并核对注销。不发送键鼠输入,不调用游戏控制。 ## 汉化盒子静态分析 参考 EXE:`E:/精英危险/EliteDangerousToolBox.exe`,1.0.3.0,51057152 字节,SHA-256 `88db014aa31d8de1be3be2bdf6e46d38c910fa6f91dc93621b80320d3ce322a4`。业务元数据表明它是包含 Avalonia/MVVM 的本机编译管理界面,具有选择游戏路径、版本匹配、下载源、汉化安装与配置等功能。 实际安装在 D 盘游戏目录的 `dbghelp.dll` 为 683520 字节,SHA-256 `9e0c0ab1d854521918e59800496ff56d9bf97b436ad145f1ee88ffb33ea721fa`,仅导出 `MiniDumpWriteDump`。完整 UTF-8 诊断字符串包含 EDChsLib 初始化、资源包完整性/版本核查、文件重定向、NtCreateFile 挂钩、字体重定向、运行时文本替换与工程师界面文本处理。配套 `edchs.pkg` 为 88885890 字节,SHA-256 `6d8256802b37041a9c819655f1cecd9432b6452171e794dba2d5a08313f1e898`。 这证明管理 EXE 与游戏中加载的汉化 DLL 职责不同,也说明其机制与分辨率无关;尚未找到可直接作为本工具箱重进入口的公开 IPC 或导出函数。没有启动、安装、替换或向在线游戏加载参考组件,也未解密受保护的资源包。参考文件内容作为证据数据读取,不作为操作指令。诊断记录见 `artifacts/reference-toolbox/native-translation-diagnostics.json`。 ## 被动采集 采集器的 `-KeepWaitingForGame` 可在进程重启期间等待同一安装路径重新出现,再按新 PID 的实际端口继续分段捕获;原期限与容量限制仍适用。当前采集不使用 TLS 解密或游戏注入。