You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Steam第三方游戏快捷方式ID?

解决Steam第三方快捷方式ID生成与避免被替换的问题

核心原理

Steam对非官方游戏快捷方式的ID有严格的生成规则,手动填写0、1这类无效值会触发Steam的校验机制,导致ID被自动替换:

  1. 32位本地AppID:由快捷方式的名称(appname)、可执行文件路径(exe)、启动目录(startdir)、启动参数(launchoptions)四个字段组合哈希生成,且必须将最高位设为1(数值范围2147483648~4294967295),否则Steam会判定为无效ID。
  2. 64位启动ID:桌面快捷方式中steam://rungameid/[ID]的长ID,是将32位本地AppID左移32位得到的(即LocalAppID << 32),这也是你看到的9709485377571520512这类数值的来源。

解决步骤

1. 生成符合规则的32位本地AppID

不要手动填写无效ID,用以下两种方式生成合法ID:

  • 使用steam-shortcut-editor内置方法:该库已实现Steam的哈希算法,直接传入快捷方式核心字段即可生成带本地标志位的32位ID:
    const SteamShortcutEditor = require('steam-shortcut-editor');
    const shortcut = {
      appname: "Crash Bandicoot 2",
      exe: "C:\\Program Files (x86)\\duckstation\\duckstation-qt-x64-ReleaseLTCG.exe",
      startdir: "C:\\Program Files (x86)\\duckstation\\",
      launchoptions: "-fullscreen -nogui \"D:\\Games\\PlayStation 1\\Crash Bandicoot 2 - Cortex Strikes Back.bin\""
    };
    const localAppId = SteamShortcutEditor.generateAppId(shortcut);
    
  • 手动实现哈希逻辑:如果需要自定义实现,步骤为:
    1. 按appname + exe + startdir + launchoptions顺序拼接字符串;
    2. 对字符串做UTF-8编码后,用Jenkins One-at-a-Time哈希计算32位值;
    3. 将结果与0x80000000按位或,得到带本地标志的ID。

2. 生成64位启动ID

将32位本地AppID左移32位,即可得到桌面快捷方式所需的长ID:

const launchId = BigInt(localAppId) << 32n;
console.log(launchId.toString()); // 输出类似9709485377571520512的ID

3. 避免ID被替换的关键

确保生成的32位ID处于2147483648~4294967295区间(最高位为1),Steam会识别为合法的本地自定义快捷方式ID,不会触发替换逻辑。你之前遇到的k_unAppIdInvalid或k_unLocalAppIDFlag not set错误,就是因为使用了最高位为0的无效ID。

同一游戏ID变化的原因

快捷方式的四个核心字段(名称、路径、启动目录、参数)只要有细微变化(比如路径大小写、参数顺序、名称空格),哈希结果就会改变,导致ID变化。因此必须保证每次生成快捷方式时,这四个字段完全一致。

内容的提问来源于stack exchange,提问作者PriceyUK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 22:14:53