我最近开始了一个项目,通过相应的方法/模拟器为我的 PC、PS1、PS2 和 Xbox 360 游戏创建一个快速启动的 XMB 风格的网络启动器。为此,我使用 AHK 来处理所有事情 - 使用启动器创建显示 WebView 的全屏窗口,然后将 JSON 与游戏数据一起从 AHK 传递到 WebView(通过扫描我的游戏文件夹创建)。
作为最后一个功能,我希望所有 Steam 外部游戏(例如所有模拟器游戏)以及《英雄联盟》等游戏都通过 Steam,这样我就可以实现游戏内覆盖/聊天/状态集成。我成功地在我的家庭服务器上使用 Node.js 和“steam-shortcut-editor”来修改我的 Steam 的 Shortcuts.vdf 文件,其中包含我的启动器中的所有游戏 - 而且效果非常好。
但是,我陷入了了解如何生成快捷方式 ID 或如何找到并提取它们的最后一个障碍。 Shortcuts.vdf 文件中列出的内容 - ID 是否从 0 开始并递增;或者如果使用基于现有 Steam 生成的快捷方式的负整数 - 通过桌面快捷方式检查时快捷方式的实际 ID 是完全不同的,即使快捷方式条目完全相同,它似乎每次都会发生变化。
我在网上看到了很多关于快捷方式ID的话题,几年前似乎略有改变,但从那时起似乎也发生了变化,因为如果不手动创建快捷方式,仍然不可能知道快捷方式ID。
我觉得最接近实现目标的是将 ID 设置为 0、1、2... 等。正如我在 Steam 启动时注意到的那样,每个新快捷方式都有如下错误消息(错误原因略有不同)但似乎是同一件事):
[2024-10-27 16:19:38] sanitize shortcut app id "C:\\Program Files (x86)\\duckstation\\duckstation-qt-x64-ReleaseLTCG.exe" -fullscreen -nogui "D:\\Games\\PlayStation 1\\Crash Bandicoot 2 - Cortex Strikes Back.bin": replacing 0 with 2260665730, reason: k_unAppIdInvalid
[2024-10-27 16:19:38] sanitize shortcut app id "C:\\Program Files (x86)\\duckstation\\duckstation-qt-x64-ReleaseLTCG.exe" -fullscreen -nogui "D:\\Games\\PlayStation 1\\Crash Team Racing.bin": replacing 1 with 3511852875, reason: k_unLocalAppIDFlag not set
但尽管如此,快捷方式 ID 分别是:
9709485377571520512
15083293246522130432
所以我最好的机会似乎是故意为每个游戏设置一个duff ID,并解析日志文件......但是我不知道如何像上面那样计算ID。任何人都可以对此提供新的见解,或者至少为我指出它可能是什么的可能方向吗?即使在创建桌面快捷方式之后,每次 Steam 解析带有“假”ID 的快捷方式文件时,即使对于完全相同的游戏,它也可能会有所不同,因此以我有限的知识,我对 Steam 如何存储/计算感到困惑它们(我猜 RNG 或时间戳可能是计算的一部分)。
如果我的问题太模糊或部分不相关,我深表歉意。预先感谢您的任何见解!
不幸的答案是,正如您所发现的,Steam 似乎以不可重复的方式任意计算快捷方式 ID。这种变化是最近发生的(约 1.5-2 年前)。
有一个开放的 Github issue 详细描述了这个问题。非steam游戏获取快捷方式ID一般有两种方式:
两者都不是没有问题,而且很难实现自动化。