☰
Starward:面向 HoYoverse 全平台游戏的 WinUI 开源启动器实战指南
2026/10/3 2:25:18 网站建设 项目流程
  • 桌面应用

【免费下载链接】Starward

Game Launcher for miHoYo - 米家游戏启动器

项目地址:https://gitcode.com/gh_mirrors/st/Starward
点击查看免费下载

Starward 是一个以解决官方启动器 HoYoPlay 痛点为目标的开源第三方游戏启动器,覆盖 HoYoverse(米哈游)旗下全部 PC 端游戏,并集成了游戏时长记录、账号切换、截图管理、抽卡记录保存等扩展能力。本文以项目 README.md 为主体骨架,结合仓库源码结构,完整介绍其安装要求与步骤、核心功能模块的源码实现、本地化协作方式以及本地编译环境,帮助读者快速部署 Starward 并从源码层面理解其功能边界。

Starward 是什么

Starward这个名字取自《崩坏:星穹铁道》的宣传语May This Journey Lead UsStarward,非常适合用作应用名。

Starward 是一个开源的第三方启动器,设计目标是弥补 HoYoPlay(米哈游官方启动器)的不足。它支持 HoYoverse 旗下在 PC 端发行的全部游戏,致力于完全替代官方启动器。在启动器的基础功能之外,项目还按个人需求整合了多项附加功能,README 中明确列出的包括:

  • 记录游戏时长(Record game time)
  • 切换游戏账号(Switch game accounts)
  • 查看游戏截图(View game screenshots)
  • 保存抽卡记录(Save gacha records)

从仓库源码结构看,这些功能分别对应src/Starward/Features/下的 PlayTime、GameAccount、Screenshot 与 Gacha 四个功能目录,此外还有 GameLauncher、GameRecord、CloudGame 等更多模块,README 也提示“更多功能留待你自行探索”。

安装要求与步骤

系统与运行时要求

在安装前,设备需要满足以下条件:

要求说明
Windows 版本Windows 10 1809(版本号 17763)及以上
WebView2 Runtime需要预先安装,用于应用内嵌网页(如登录、公告等场景)
WebP 图片扩展需要安装,用于显示 WebP 格式的背景图片与素材
系统视觉效果建议开启系统设置中的透明效果(Transparency effects)与动画效果(Animation effects),以获得更好的使用体验

关于 WebP 扩展有一个特别提示:WebP 图片扩展通常随系统附带(一般是预装组件),如果应用无法正常显示背景图片,请确认该扩展是否已安装。

这些要求的设定与项目的技术选型直接相关:从 Starward.csproj 可以看到,主程序面向net10.0-windows10.0.26100.0,最低平台版本为10.0.17763.0(对应 Windows 10 1809),并启用了 WinUI(<UseWinUI>true</UseWinUI>)与 Windows App SDK(<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>),这解释了为什么对系统版本有明确的下限要求。

安装步骤

  1. 前往项目的 GitHub Release 页面,根据你的 CPU 架构下载对应安装包(仓库发布配置覆盖 x86、x64、ARM64 三种架构,见 win-x86.pubxml、win-x64.pubxml 与 win-arm64.pubxml)。
  2. 解压安装包。
  3. 运行Starward.exe,并跟随首次启动的引导提示完成初始化配置。

首次启动时,程序会在 App.xaml.cs 的OnLaunched中调用AppConfig.CheckEnviromentAsync()对环境进行检查;启动入口则在 Program.cs,其Main方法通过Microsoft.UI.Xaml.Application.Start启动 WinUI 应用,并注册了AppDomain.CurrentDomain.UnhandledException全局异常处理,异常日志默认写入%LOCALAPPDATA%\Starward\log目录。

单实例与命令行启动细节

从 App.xaml.cs 的OnLaunched实现可以观察到几个实用的启动细节:

  • 程序通过AppInstance.FindOrRegisterForKey("main")实现单实例运行,重复启动时会重定向到已有实例并退出当前进程;
  • 启动参数带--hide时,只启动系统托盘窗口(SystemTrayWindow),不显示主窗口;
  • 支持starward://test/协议前缀,用于打开 URL 协议测试窗口;
  • 支持rpc、playtime、startgame等命令式启动参数(见HandleStartupAsync),其中playtime配合pid与biz参数用于记录游戏进程时长,startgame配合biz参数可直接拉起对应游戏,这些参数的实际业务实现在 PlayTimeService 与 GameLauncherService 中。

核心功能与源码实现

游戏时长记录(PlayTime)

README 提到的“记录游戏时间”由 PlayTimeService 实现。从源码看,LogPlayTimeAsync(GameBiz biz, int pid)会以游戏进程 PID 注册一个playtime_{pid}的应用实例(避免重复记录),随后以约 800~1200 毫秒的随机间隔轮询进程状态,进程退出时写入PlayTimeState.Stop记录并结束计时循环。计时的启停通过startgame/playtime命令参数串联:startgame启动游戏后会派生playtime子进程完成记录。UI 侧由 PlayTimeButton.xaml 展示累计时长。

游戏账号切换(GameAccount)

“切换游戏账号”由 GameAccountService 实现。其核心机制是从 Windows 注册表读取各游戏的登录凭证:

  • 通过biz.GetGameRegistryKey()定位游戏在注册表中的键;
  • 根据服务器区域(cn/global)读取对应注册表值(键名定义见 GameRegistry.cs,如MIHOYOSDK_ADL_PROD_CN_h3123967166与MIHOYOSDK_ADL_PROD_OVERSEA_h1158948810);
  • 对读取到的字节数据做 SHA256 哈希并生成账号实体GameAccount,同时针对不同游戏(bh3、hk4e、hkrpg)分别从不同注册表值中解析 UID。

已保存的账号列表则通过 DatabaseService 存入本地 SQLite 数据库(查询语句可见GetGameAccountsFromDatabase中的SELECT * FROM GameAccount WHERE GameBiz = @biz)。切换账号时,GameAccountSwitcher.xaml 会负责将选中的凭证写回注册表,实现免密登录切换。

截图管理(Screenshot)

截图功能由 Screenshot 目录下的多个组件协作完成:

  • ScreenCaptureService.cs 与 ScreenCaptureHelper.cs:负责游戏进程的自动截图捕获与存储;
  • ScreenshotPage.xaml:按游戏/日期分组浏览截图的主界面;
  • ImageViewWindow.xaml:全屏看图窗口;
  • ImageBatchConvertWindow.xaml:支持批量格式转换(图片编解码相关能力可参考 Codec 目录下的ImageLoader、ImageSaver等实现);
  • ScreenshotFolderManageDialog.xaml:管理截图保存文件夹。

抽卡记录(Gacha)

抽卡记录是功能最丰富的模块之一,对应 Gacha 目录,按游戏拆分为三个服务:GenshinGachaService(原神)、StarRailGachaService(星穹铁道)、ZZZGachaService(绝区零)。

从基类 GachaLogService.cs 的源码可以看到关键实现逻辑:

  • 各游戏的卡池记录统一存入本地 SQLite 表(如GachaLogService.GetUids()中的SELECT DISTINCT Uid FROM {GachaTableName});
  • 读取记录后,服务会为每条记录计算序号Index与保底计数Pity,这是抽卡统计页展示五星保底进度(GachaStatsCard.xaml、ZZZGachaStatsCard.xaml)的数据基础;
  • 卡池数据通过 GachaLogClient.cs 及按游戏划分的GenshinGachaClient、StarRailGachaClient、ZZZGachaClient(均在 Starward.Core/Gacha 下)从官方接口获取;
  • 支持 UIGF 格式的导入/导出与云端存档备份(UIGFGachaService.cs、UIGF3File.cs、UIGF4File.cs);
  • 支持将记录导出为 Excel 文件(依赖 MiniExcel,见 GachaLogExportFile.cs)。

支持的游戏范围

Starward 覆盖 HoYoverse 旗下全部 PC 端游戏。仓库中 GameBiz.cs 定义了统一的游戏业务标识(如hk4e对应原神、hkrpg对应崩坏:星穹铁道、nap对应绝区零、bh3对应崩坏3 等),并结合服务器区域(cn/global)区分国服与海外服。游戏元数据(启动参数、安装信息、公告、版本包等)通过 HoYoPlay 与 HoYoPlayService 从官方渠道拉取;游戏安装目录的记录与校验逻辑可在 GameLauncherService.cs 中看到(支持可移动存储设备上的游戏路径)。启动游戏前,StartGameButton.xaml 等组件会提供登录态检查与启动选项。

本地化(Localization)

Starward 的应用内文本通过 Crowdin 平台协作翻译,README 中展示了各语言当前的翻译进度徽章,涉及语言包括:de-DE、en-US、it-IT、ja-JP、ko-KR、ru-RU、th-TH、vi-VN、zh-CN、zh-TW 等。

从 Localization.cs 可以看到,程序内维护了一份包含 11 种语言的语言列表(含标题与语言代码,如("简体中文 (zh-CN)", "zh-CN")、("繁體中文 - 台灣地區 (zh-TW)", "zh-TW"))。实际字符串资源存放在 src/Starward.Language 目录下的Lang.*.resx系列资源文件(默认资源为Lang.resx,各语言版本如Lang.zh-CN.resx、Lang.ja-JP.resx等),核心库 Starward.Core 则有自己的CoreLang.*.resx资源系列。

如果你希望参与翻译,README 提供了两份指引:

  • Localization Guide:本地化贡献指南;
  • 翻译工作通过 Crowdin 的 starward 项目进行,可帮助翻译与校对你的母语文本。

本地开发与编译

要在本地编译 Starward,需要安装Visual Studio 2022,并勾选以下工作负载:

  • .NET Desktop Development(.NET 桌面开发)
  • C++ Desktop Development(C++ 桌面开发)
  • Universal Windows Platform Development(通用 Windows 平台开发)

这三项工作负载的用途与仓库构成相对应:主程序是 WinUI/.NET 桌面应用(.NET Desktop Development),Starward.Launcher 是一个 C++ 原生启动器项目(C++ Desktop Development),而 WinUI 的 XAML 编译与打包则依赖 UWP 平台工具链(Universal Windows Platform Development)。

从 Starward.csproj 还可以观察到更多技术细节:

  • 项目引用关系:主程序引用Starward.Core(核心数据模型与 API 客户端)、Starward.Language(本地化资源)、Starward.RPC(后台 RPC 服务)与Starward.Setup.Core四个子项目;
  • 关键技术栈:CommunityToolkit.Mvvm(MVVM 与消息机制)、CommunityToolkit.WinUI(控件与动画)、Microsoft.WindowsAppSDK 1.8、Microsoft.Data.Sqlite(本地数据库)、Dapper(数据访问)、Serilog(日志)、MiniExcel(Excel 导出)、ComputeSharp.D2D1 / Win2D(图形处理)等;
  • 发布配置:通过PublishProfiles下的win-x86.pubxml、win-x64.pubxml、win-arm64.pubxml分别发布三种架构的版本。

结语

Starward 以“替代官方启动器”为目标,将启动、时长统计、账号切换、截图与抽卡记录整合进一个 WinUI 应用,并保持了清晰的多项目分层(UI 主程序 / 核心库 / 本地化 / RPC / 原生启动器)。本文覆盖的安装、功能、本地化与编译信息均可在 README.md 及各功能目录源码中得到印证,后续如需深入了解某一模块(如抽卡 UIGF 导入导出、账号注册表操作、游戏安装包下载),可直接从对应 Features 目录继续阅读源码。

  • 桌面应用

【免费下载链接】Starward

Game Launcher for miHoYo - 米家游戏启动器

项目地址:https://gitcode.com/gh_mirrors/st/Starward
点击查看免费下载

相关推荐

上一篇:如何免费查手机号归属地,并在地图上标出城市?
下一篇:Go 类型转换库 cast 完全指南:在 substrate 项目中实现安全易用的动态类型转换

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询