资讯动态

GlosSI 使用实战:从安装、Steam 快捷方式接入到全局 SteamInput 与系统级 Overlay 完整配置指南

发布时间:2026/10/14 16:58:41 来源:尧图企业网站定制
桌面应用游戏开发【免费下载链接】GlosSITool for using Steam-Input controller rebinding at a system level alongside a global overlay项目地址https://gitcode.com/gh_mirrors/gl/GlosSI点击查看免费下载本文围绕 GlosSI 官方使用文档 Usage.md 展开覆盖安装安装包与 zip 包、快速上手、通过 GlosSIConfig 管理 Steam 快捷方式的舒适用法以及两套配置体系Pre-Launch 配置与 GlosSI overlay 运行时配置的具体操作。读完并结合源码路径common/Settings.h、GlosSIConfig/UIModel.cpp后你可以独立完成 GlosSI 的部署理解每个配置项/命令行参数的实际作用并掌握 AppID 技巧等进阶玩法与日志排查方法。一、GlosSI 解决什么问题GlosSIGlobal systemwide Steam Input前身为 GloSC是一个工具让你可以在系统级使用 Steam-Input 手柄重映射并获得一个系统范围无边框窗口模式的 Steam Overlay。其典型使用场景是在 Windows StoreUWP应用、模拟器等与 Steam-Input 不兼容的程序中使用 SteamController/SteamDeck 手柄。从 Readme.md 可以看到其工作机制GlosSI 提供一个可添加为 Steam 非 Steam 游戏的目标程序GlosSITarget.exe它把配置好的手柄输入重定向到一个系统级虚拟 Xbox 360 手柄基于 ViGEm 驱动见 GlosSITarget/InputRedirector.h同时用一个置顶透明窗口承载 Steam Overlay。因此游戏不需要通过 GlosSI 启动Quick usage 模式也可以通过 GlosSIConfig 让 GlosSI 替你启动游戏并管理多个快捷方式Comfy usage 模式。同时Readme 明确指出 GlosSI不是Steam 手柄配置工具的替代品也不是远程游玩/串流方案ViGEm 已宣布停止维护EOLReadme 也说明该项目已由后继项目 SISR 接替。阅读本指南时请留意这一项目现状。二、安装2.1 使用安装包Installer官方流程只有一句话Install, Reboot, Go!——安装、重启、开玩。对照安装包脚本 Installer/Installer.nsi可以确认安装包实际做了以下事情这也是必须重启的原因主程序安装到$PROGRAMFILES64\GlosSIInstallDir定义第 45 行并写入开始菜单快捷方式GlosSI.lnk与GlosSI-Target.lnk第 147-148 行依次执行三个驱动/运行时安装节第 118-134 行Section Visual Studio Runtime静默安装vc_redist.x64.exeSection ViGEmBus Driver运行ViGEmBusSetup_x64.exe虚拟手柄总线驱动Section HidHide Driver运行HidHideSetup.exe真实设备隐藏驱动。ViGEmBus 与 HidHide 都是内核驱动加载后需要重启才能对已运行的系统进程生效所以文档要求重启。2.2 使用 .zip 文件如果使用 zip 包发布按照 Usage.md 的步骤操作将 .zip 文件解压到电脑上任意目录安装vc_redist_x64.msiVisual C 运行时安装ViGEmBusSetup_x64.exeViGEm 虚拟手柄驱动安装HidHideSetup.exe设备隐藏驱动重启必须。完成以上步骤即可使用 GlosSI。三、前置条件Prerequisites在开始任何使用前必须满足两个前置条件在 Steam 中启用 XBox configuration supportSteam 设置 → 控制器即允许用 Xbox 配置方案保持 Steam 正在运行。这一点有源码级佐证GlosSITarget启动时会检查该设置若未启用会在 overlay 中弹出提示窗口要求你先去 Steam 设置中开启——见 GlosSITarget/SteamTarget.cpputil::steam::getXBCRebindingEnabled检查 XBox Controller configuration support Disabled 提示框。此外GlosSIConfig 还提供了自动开启该开关的入口UIModel::enableSteamInputXboxSupport()会定位 Steam 用户数据目录下的localconfig.vdf把SteamController_XBoxSupport的值从0改为1——见 GlosSIConfig/UIModel.cpp。四、快速上手Quick usage适合故障排查这是最简使用路径只依赖 3 步在 Steam 中将GlosSITarget.exe添加为非 Steam 游戏Add a Non-Steam Game为这个新快捷方式在 Steam 中设置手柄配置Controller Configuration从 Steam 启动这个GlosSITarget快捷方式。完成之后你就可以像平常一样直接启动任何游戏/应用不经过 GlosSI 启动器获得全局 SteamInput 以及系统范围的 Steam Overlay。重要限制原文档加粗强调Overlay 仅在**无边框窗口borderless window**模式下生效不支持独占全屏exclusive fullscreen。 在此模式下Overlay 默认对 UWPWindows Store应用也不生效——除非你在启动后通过 GlosSI overlay 手动启用。从源码结构看这两条限制的底层原因分别是独占全屏时 Steam 自身的 Overlay 注入机制不工作这是 Steam 侧的限制UWP 应用的 overlay 需要额外的启用流程GlosSITarget内有专门的 GlosSITarget/UWPOverlayEnabler.h 模块在运行时对目标 UWP 窗口做处理且可通过-disableuwpoverlay参数关闭见下文命令行参数。GlosSITarget 启动后发生了什么了解内部流程有助于排查问题。入口在 GlosSITarget/main.cpp单实例检查FindWindowA(nullptr, GlosSITarget)发现已有实例时会向http://localhost:8756的/quit端点发 POST 请求关闭旧进程——即GlosSITarget内置了一个本地 HTTP 服务器GlosSITarget/HttpServer.h这也是 Steam 侧脚本与其通信的通道解析命令行与配置文件Settings::Parse(argsv)加载逻辑详见 common/Settings.hSteam 注入检测SteamOverlayDetector::IsSteamInjected()通过检查进程中是否加载了GameOverlayRenderer64.dll来判断是否由 Steam 启动——见 GlosSITarget/SteamOverlayDetector.cpp。若未被 Steam 注入则进入实验性 global mode全局模式这也是不经过 Steam 也能用的底层来源主循环SteamTarget::run()GlosSITarget/SteamTarget.cpp中持续运行detector_.update()利用 Steam hook 窗口消息的副作用检测 overlay 开关见 SteamOverlayDetector.cpp 中的PeekMessage逻辑、更新 overlay 窗口以及处理AppLauncher的进程监控。五、舒适用法Comfy usage用 GlosSIConfig 管理快捷方式从 Steam 启动 GlosSITarget再单独去启动游戏这一流程繁琐且每个快捷方式只能对应一套手柄配置。GlosSIConfig 提供图形化的快捷方式管理与配置功能基本流程如下原文档步骤完整保留启动GlosSIConfig.exe点击➕ 按钮添加一个由 GlosSI 管理的新快捷方式选择你希望 GlosSI 替你启动的应用类型选择UWP AppWindows Store 应用选择Win32 Program传统桌面程序与游戏选择Add Manually不想让 GlosSI 启动任何东西、或想稍后再配置游戏启动时使用。如果选择了Add Manually请输入该快捷方式想要的名称点击 Save 按钮点击➕ to Steam 按钮可选若要添加多个快捷方式重复步骤 2-5重启 Steam在 Steam 中为新添加的快捷方式设置手柄配置在 Steam 中搜索并启动新添加的快捷方式。完成之后GlosSI 会替你启动游戏并在其上方绘制 Steam Overlay仅 borderless window 与 UWP同时提供手柄输入重定向。源码视角Save 与 to Steam 到底做了什么SaveUIModel::writeTarget()会把该快捷方式的全部配置写成 JSON 文件保存在用户配置目录%AppData%\GlosSI\Targets\名称.json目录解析逻辑见 common/util.h 的getDataDirPath()返回Roaming\GlosSI目标配置目录在 GlosSIConfig/UIModel.cpp 中初始化为Targets子目录。to SteamUIModel::addToSteam()GlosSIConfig/UIModel.cpp会向 Steam 的shortcuts.vdf写入一条记录exe指向 GlosSI 安装目录下的GlosSITarget.exeStartDir若配置了启动路径则为游戏所在目录否则为 GlosSI 目录LaunchOptions为该快捷方式对应的名称.json文件名——这正是GlosSITarget启动时用来定位具体配置的参数图标字段自动取游戏 exe 或 Steam Grid 图片路径并追加Installed locally与GlosSI标签。写 VDF 失败时的 UAC 重试writeShortcutsVDF()若普通权限写shortcuts.vdf失败会以runas方式自我提权重试GlosSIConfig/UIModel.cpp对应界面上可能弹出的管理员授权窗口。重启 SteamUIModel::restartSteam()执行taskkill.exe /im steam.exe /f后重新拉起steam.exeGlosSIConfig/UIModel.cpp。UWP 列表来源界面中的 UWP 应用清单由UWPApps()调用 GlosSIConfig/UWPFetch.h 枚举系统包获得launch.isUWP标志则由 common/Settings.h 的checkIsUwp()根据启动路径形态是否包含盘符前缀自动判定。启动器本身GlosSITarget内的AppLauncherGlosSITarget/AppLauncher.cpp按类型分派Win32 程序走CreateProcessW遇到ERROR_ELEVATION_REQUIRED时自动改用ShellExecuteExWrunas提权重试第 323-399 行UWP 包走 COM 接口IApplicationActivationManager::ActivateApplication启动第 401-447 行因为 UWP 进程不属于 GlosSITargetAppLauncher会通过遍历ApplicationFrameWindow并匹配PKEY_AppUserModel_ID来找到其窗口句柄getProcessHwnds()第 266-296 行URL/商店链接走ShellExecuteExW如 Epic Games 启动器场景。六、配置详解Configuration6.1 启动前配置Pre-LaunchGlosSIConfigGlosSIConfig 提供了相当多的配置项用于按喜好调整功能、以及辅助排查问题。大多数选项旁边都有一个?按钮会给出该选项作用的简短说明。不必过于纠结高级选项——官方默认值对绝大多数支持的用例都够用sane defaults。6.2 运行时配置On-the-flyGlosSI overlayGlosSIConfig 中可用几乎全部的配置项都可以在运行时通过GlosSI overlay修改打开/关闭 GlosSI overlay 的方式快速连续两次打开并关闭 Steam OverlayGlosSI overlay 支持手柄按键导航。6.3 配置文件结构与默认值GlosSITarget 的每个快捷方式对应一个 JSON 配置%AppData%\GlosSI\Targets\名称.json无参启动时则回退到default.json解析逻辑见 common/Settings.h。各字段的默认值定义在 common/Settings.h 的结构体中与 GlosSIConfig 生成默认配置时的取值GlosSIConfig/UIModel.cppgetDefaultConf()一致{ version: 1, launch: { launch: false, // 是否由 GlosSITarget 代为启动应用 launchPath: null, // 启动目标路径exe / UWP 包名 / URL launchAppArgs: null, // 传递给应用的参数 closeOnExit: true, // 被启动的应用退出后 GlosSITarget 是否随之退出 waitForChildProcs: true, // 是否跟踪子进程树游戏通过子进程启动时很关键 ignoreLauncher: true, // 忽略启动器进程如 Epic 启动器自身 killLauncher: false, // 是否结束启动器进程 launcherProcesses: [] // 额外的启动器进程名列表 }, devices: { hideDevices: true, // 用 HidHide 对目标应用隐藏真实手柄 realDeviceIds: false }, window: { windowMode: false, maxFps: 0, // overlay 窗口帧率上限 scale: 0.0, // overlay 缩放 disableOverlay: false, // 完全禁用系统级 overlay 窗口 hideAltTab: true, // 从 AltTab 列表中隐藏 overlay 窗口 disableGlosSIOverlay: false, opaqueSteamOverlay: false }, controller: { maxControllers: -1, // 最多虚拟化的手柄数量-1 为不限制 allowDesktopConfig: false, emulateDS4: false, // 是否模拟 DS4 而非 Xbox 手柄 updateRate: 144 // 输入重定向轮询率Hz }, steamPath: Steam 安装目录, steamUserId: Steam 用户 ID, globalModeGameId: , // 全局模式使用的 GameID globalModeUseGamepadUI: true, minimizeSteamGamepadUI: true, extendedLogging: false, name: 快捷方式名, icon: null }其中与 设备隐藏 相关的能力依赖 HidHide真实手柄对被启动的游戏进程隐藏devices.hideDevices对应 common/HidHide.h让游戏只看到 ViGEm 虚拟出的 Xbox 手柄从而彻底走 Steam-Input 链路ViGEm 虚拟手柄的创建、震动回调等实现在 GlosSITarget/InputRedirector.cpp。6.4 GlosSITarget 命令行参数Steam 快捷方式的 Launch Options 或手动启动时GlosSITarget支持以下命令行开关完整定义见 common/Settings.h参数效果对应配置项-window使用窗口化 overlay 模式window.windowMode true-disableuwpoverlay禁用 UWP overlay 自动处理common.no_uwp_overlay true-disablewatchdog禁用 watchdog 机制common.disable_watchdog true-ignorelauncher忽略启动器进程launch.ignoreLauncher true-extendedLogging开启扩展日志common.extendedLogging true-globalModeUseGamepadUI全局模式使用 Gamepad UIcommon.globalModeUseGamepadUI true-disallowGlobalMode禁止实验性全局模式未从 Steam 启动时直接不可用common.allowGlobalMode false注意解析优先级先加载 JSON 配置文件再依次应用命令行开关common/Settings.h即命令行参数可以覆盖配置文件。另外若命令行中出现了不属于上述开关的参数会被当作配置文件名自动补.json后缀在%AppData%\GlosSI\Targets\下查找找不到时回退default.json。七、实用技巧Neat tips and tricks7.1 用 AppID 技巧解锁社区手柄配置想让 GlosSI 托管的游戏用上** Steam 社区共享的手柄配置**比如游戏在 Epic 或其他商店购买做法把 Steam 中的快捷方式重命名为该游戏的 Steam AppID。这样 Steam 会把它当作该 AppID 来匹配社区配置。社区配置可能仅在启动快捷方式之前可获取。AppID 可通过公开的 Steam AppID 查询站点如 SteamDB、Steambase获得。实现层面GlosSIConfig 会用 AppID 构造完整的 Steam GameID——UIModel::getGameId()的算法是((uint64)appid 32) | ((uint32)2 24)其中2表示SteamLaunchableType::Shortcut见 GlosSIConfig/UIModel.cppisInSteam()/getAppId()第 165-199 行则通过遍历shortcuts.vdf中exe包含glossitarget.exe的条目来反查 AppID。7.2 日志排查原文档将 Quick usage 标注为 Handy for troubleshooting其价值在于出问题时可以把问题隔离到Steam GlosSITarget这一最小链路。配合源码中的日志设施排查GlosSITarget的日志默认写入%AppData%\GlosSI\glossitarget.logGlosSITarget/main.cpp并同步到控制台与 overlay 内的日志窗口OverlayLogSink加-extendedLogging参数可获得更细粒度的进程/消息跟踪common/Settings.h仓库还提供了两个辅助脚本 tail_config_logs.ps1 与 tail_target_logs.ps1用于实时滚动查看 GlosSIConfig 与 GlosSITarget 的日志崩溃时GlosSITarget会在同一数据目录生成glossitarget.dmp内存转储GlosSITarget/main.cpp 的Win32FaultHandler可供进一步分析。八、小结安装安装包一键完成VS 运行时 ViGEmBus HidHide 驱动zip 方式需手动装齐三者后必须重启最小链路把GlosSITarget.exe加为非 Steam 游戏 → 配手柄方案 → 从 Steam 启动即可获得全局 SteamInput 系统级 Overlay仅 borderless window舒适链路GlosSIConfig 添加快捷方式UWP / Win32 / 手动→ Save → to Steam → 重启 Steam → 配手柄方案配置Pre-LaunchGlosSIConfigJSON 存于%AppData%\GlosSI\与 On-the-fly双开 Steam Overlay 呼出 GlosSI overlay两套体系关键参数默认值与命令行覆盖机制均有源码依据技巧快捷方式重命名为 Steam AppID 可获取社区手柄配置日志与 dump 文件位于%AppData%\GlosSI\下配合-extendedLogging排查问题。赞分享桌面应用游戏开发【免费下载链接】GlosSITool for using Steam-Input controller rebinding at a system level alongside a global overlay项目地址https://gitcode.com/gh_mirrors/gl/GlosSI点击查看免费下载相关推荐GlosSI 全局 Steam-Input 实现解析虚拟手柄、系统级 Overlay 与 Steam 快捷方式管理GlosSI 全局 Steam Input 实现解析虚拟手柄、系统级 Overlay 与 Steam 快捷方式管理 GlosSI前身 GloSCGloba桌面应用游戏开发Ultralytics 快速入门完全指南安装方式、CLI/Python 双接口实战与全局配置详解Ultralytics 快速入门完全指南安装方式、CLI/Python 双接口实战与全局配置详解 Ultralytics YOLO本仓库 ultralyti人工智能深度学习计算机视觉预训练nestjs-i18n与视图引擎集成EJS、Handlebars和Pug实战教程nestjs i18n与视图引擎集成EJS、Handlebars和Pug实战教程 nestjs i18n是NestJS框架的国际化模块能够帮助开发者轻松实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑