最近开发了一个兼具游戏启动功能的游戏存档管理软件,因此研究了一下如何获取部分游戏平台的本地安装游戏列表。本文包含 Steam,Epic Game Launcher(简称为Epic), GOG Galaxy(简称为 GOG)和 Ubisoft Connect(简称为 Uplay)平台的本地游戏列表获取方法。
Steam
通过 Steam 安装的游戏都会在注册表“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall”下添加一个“Steam APP” + appid 形式的条目,每个条目下都有一些键,包括“DisplayName”、“DisplayIcon”、“InstallLocation”等的内容。理论上应该有一个游戏启动文件的相对路径目录,因为提交游戏的时候需要填写,但是我把有关文件夹翻了个底朝天也没有找到。
Epic
Epic 使用一些奇怪的代号来代表真实的游戏名称,我找了很多地方也没找到游戏名和代号间的映射关系。后来在 StackExchange (https://gaming.stackexchange.com/a/363039) 找到了答案。原来 Epic 把安装的游戏列表写在 C:\ProgramData\Epic\UnrealEngineLauncher\LauncherInstalled.dat 中,一个伪装成二进制文件的 json 文件,其中有一个 InstallationList 数组,数组的条目由 InstallLocation,AppName(就是神秘代号)和 AppVersion 组成。
GOG
GOG 的数据都存储在 C:\ProgramData\GOG.com\Galaxy\storage 下的 galaxy-2.0.db 里,用 HxD 打开看了一下发现是 SQLite 数据库,用 DB Browser for SQLite 打开看了下,发现里面内容十分丰富,甚至有所有 GOG 游戏的详细数据。本地安装的游戏在 GameFiles 表下,表中 fileAttribute 值为 1 的项即为游戏可执行文件。同时在 “HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall”下也有游戏条目,内容和 Steam 条目大同小异。
Uplay
Uplay 安装的游戏在 “HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall”下有“Uplay Install” + 数字形式的条目,基本上也是那几样。同时“C:\Program Files (x86)\Ubisoft\Ubisoft Game Launcher\cache\configuration\configurations”(似乎是一个YAML文件)中也有一些有用的信息。
值得注意的是 Steam 和 Uplay 的游戏注册表条目后面的数字,或者下属 "UninstallString" 的值所包含的 Url 也可以稍加改造变成游戏启动 Url。Steam 游戏的启动 Url 是“steam://rungameid/appid”的形式,Uplay 是“uplay://launch/数字/0”的形式(我也不知道后面的0是干什么的)。根据前面那个StackExchange的回答,Epic的Url是 com.epicgames.launcher://apps/[codename]?action=launch&silent=true,codename 就是前面提到的神秘代号,但 Epic Game Launcher 近两天出了很严重的 bug 以至于根本无法正常启动,我也就无从验证了。GOG 是也注册了一个 gogglaxy 的 Custom URI Scheme 条目但是没有值,在 GOG Galaxy 里似乎也没有添加快捷方式的选项。
当然知道了这些还是不够,有时候还需要知道游戏启动文件相对于安装文件夹的相对路径以及最重要的存档文件夹所在位置,因为存档一般由游戏自己管理,除非设置了云存档。大部分游戏的存档都在 %AppData% 文件夹下,一部分在“C:\Users\[username]\Documents”文件夹下,一部分在“C:\Users\[username]\Documents\My Game”文件夹下,当然也有保存在注册表或其他奇奇怪怪的地方的。所以接下来需要建立一个包含游戏名称,可执行文件相对路径和不同游戏平台存档路径的数据库。(如果有现成的就好了┑( ̄Д  ̄)┍)与此同时,GameSave Manager (https://www.gamesave-manager.com/?s=support&c=supported_games)声称支持 7447 个游戏,我还是一步一步来吧。
暂无关于此日志的评论。