如何在 Windows 上自动发现 Steam 安装路径,并枚举所有已安装游戏呢?
- 通过注册表定位 Steam
- 解析 VDF 配置
- 扫描 manifest 文件
- 构建结构化游戏数据。
项目整体架构(Architecture)
架构图
架构设计
分层职责
| 层级 | 职责 |
|---|---|
| 输入层 | 提供系统数据来源(注册表 + 配置文件 + manifest) |
| 解析与发现层 | 将“系统信息”转化为“可遍历路径” |
| 核心逻辑层 | 扫描并提取游戏信息 |
| 输出层 | 提供统一结构的数据 |
模块协作逻辑
- 路径发现(注册表)
→ 获取 Steam 根目录 - 库发现(VDF)
→ 找到所有游戏库路径(多盘支持) - 游戏扫描(ACF)
→ 遍历每个库中的 manifest - 信息提取
→ 构建统一数据结构
核心流程
流程图
配置 / 输入
输入来源抽象
注册表 → 安装路径
VDF → 库路径列表
ACF → 游戏元数据
数据结构设计
games = {
appid: {
"name": str,
"path": str,
"size": int,
}
}
设计
-
使用
dict:- O(1) 查询
- 易序列化(JSON)
-
以
appid为 key:- 全局唯一
- 与 Steam 生态一致
VDF 解析器
解析流程
手动解析原因
| 原因 | 说明 |
|---|---|
| VDF 非标准格式 | 无法直接 JSON.parse |
| 嵌套结构 | 需手动解析 |
| 可复用性 | 可用于所有 Steam 配置 |
游戏扫描核心逻辑:
for lib in libraries:
for manifest in steamapps:
parse(manifest)
extract(game_info)
运行 / 验证
1. 运行环境
- Windows
- Python 3.x
2. 运行
python steam_helper.py
或在代码中调用:
from steam_helper import get_installed_games
games = get_installed_games()
print(games)
3. 示例输出
{
"570": {
"name": "Dota 2",
"path": "D:\SteamLibrary\steamapps\common\dota 2 beta",
"size": 25000000000
}
}
本文使用 markdown.com.cn 排版