├── .gitattributes
├── .gitignore
├── LICENSE
├── README.md
├── ROADMAP.md
├── assets
├── account.png
├── main.png
└── settings.png
└── src
├── .editorconfig
├── .gitignore
├── .vsconfig
├── GenshinSwitch.Analyze
├── .gitignore
├── AppCenterException.cs
├── AppCenterWrapper.cs
└── GenshinSwitch.Analyze.csproj
├── GenshinSwitch.Core
├── .gitignore
├── AssemblyInfo.cs
├── Contracts
│ └── Services
│ │ ├── IFileService.cs
│ │ └── ISpecialPathService.cs
├── Extensions
│ └── ProcessExtension.cs
├── GenshinSwitch.Core.csproj
├── GenshinSwitch.Core.csproj.user
├── GenshinSwitchException.cs
├── Helpers
│ ├── Json.cs
│ └── Yaml.cs
├── Logger.cs
├── README.md
├── Services
│ ├── FileService.cs
│ └── SpecialPathService.cs
├── Settings
│ ├── SettingsCache.cs
│ ├── SettingsDefinition{T}.cs
│ ├── SettingsManager.cs
│ └── SettingsSerializer.cs
└── Threads
│ └── CancelabledTask.cs
├── GenshinSwitch.Fetch
├── .gitignore
├── Attributes
│ └── UACRequestAttribute.cs
├── ConfigIni
│ └── GenshinConfigIni.cs
├── GenshinSwitch.Fetch.csproj
├── Launch
│ ├── HyperionCtrl.cs
│ ├── LaunchCtrl.cs
│ ├── LaunchParameter.cs
│ └── RelaunchMethod.cs
├── Lazy
│ ├── LazyCrypto.cs
│ ├── LazyInput.cs
│ ├── LazyInputHelper.cs
│ ├── LazyLauncher.cs
│ ├── LazyOutput.cs
│ ├── LazyOutputHelper.cs
│ ├── LazyOutputSerializer.cs
│ ├── LazyProtocol.cs
│ ├── LazyRepository.cs
│ ├── LazySpecialPathProvider.cs
│ ├── LazyVerification.cs
│ └── UpdateTime.cs
├── Muter
│ ├── ForegroundWindowHelper.cs
│ └── MuteManager.cs
├── Regedit
│ ├── GenshinRegedit.cs
│ ├── GenshinRegedit.reg
│ ├── README.md
│ └── RegeditKeys.cs
└── Service
│ ├── MainService.cs
│ └── MainServiceCommmand.cs
├── GenshinSwitch.WindowsService
├── .gitignore
├── App.config
├── AutoStartRegistyHelper.cs
├── CommandRunner.cs
├── EventLoop.cs
├── FodyWeavers.xml
├── FodyWeavers.xsd
├── GenshinSwitch.WindowsService.csproj
├── GenshinSwitch.WindowsService.sln
├── MainInstaller.cs
├── MainRegister.cs
├── MainRunner.cs
├── MainService.cs
├── Program.cs
├── Properties
│ └── launchSettings.json
├── RuntimeHelper.cs
├── Sapphire.ico
└── app.manifest
├── GenshinSwitch.sln
├── GenshinSwitch
├── .gitignore
├── Activation
│ ├── ActivationHandler.cs
│ ├── AppNotificationActivationHandler.cs
│ ├── DefaultActivationHandler.cs
│ └── IActivationHandler.cs
├── App.xaml
├── App.xaml.cs
├── Assets
│ ├── Fonts
│ │ ├── DigitalClock.ttf
│ │ ├── HarmonyOS_Sans_SC_Regular.ttf
│ │ └── Segoe Fluent Icons.ttf
│ ├── Images
│ │ ├── LocalAvatars
│ │ │ ├── CreateCSharp.py
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Ayaka.png
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Barbara.png
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Bennett.png
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Chongyun.png
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Collei.png
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Cyno.png
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Diluc.png
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Diona.png
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Fischl.png
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Ganyu.png
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Kaeya.png
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Keqing.png
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Mona.png
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Ningguang.png
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Noel.png
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Qin.png
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Razor.png
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Sucrose.png
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Xiangling.png
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Xingqiu.png
│ │ │ ├── UI_Gcg_Char_AvatarIcon_Yoimiya.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_AbyssFire.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_AbyssIce.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_AbyssWater.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_BruteAxeElec.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_BruteAxeFire.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_BruteIceShield.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_Hili.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_HiliClub.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_HiliIce.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_HiliRange.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_HiliRangeElec.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_KairagiElec.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_KairagiFire.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_SamuraiRonin01.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_SamuraiRonin02.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_SamuraiRonin03.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_ShamanGrass.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_ShamanWater.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_ShamanWind.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_SlimeElec.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_SlimeWater.png
│ │ │ ├── UI_Gcg_Char_EnemyIcon_UnuAnudattaGrass.png
│ │ │ ├── UI_Gcg_Char_MonsterIcon_Bruterock.png
│ │ │ ├── UI_Gcg_Char_MonsterIcon_Fatuus.png
│ │ │ ├── UI_Gcg_Char_MonsterIcon_Fungusgrass.png
│ │ │ ├── UI_Gcg_Char_MonsterIcon_Maidenwater.png
│ │ │ ├── UI_Gcg_Char_MonsterIcon_Ningyo.png
│ │ │ ├── UI_Gcg_Char_MonsterIcon_Oceanid.png
│ │ │ ├── UI_Gcg_Char_MonsterIcon_SkirmisherWater.png
│ │ │ ├── UI_Gcg_Char_MonsterIcon_SkirmisherWind.png
│ │ │ ├── UI_MusicV3SelectPage_Album_Pic01.png
│ │ │ ├── UI_MusicV3SelectPage_Album_Pic02.png
│ │ │ ├── UI_MusicV3SelectPage_Album_Pic03.png
│ │ │ ├── UI_MusicV3SelectPage_Album_Pic04.png
│ │ │ ├── UI_MusicV3SelectPage_Album_Pic05.png
│ │ │ ├── UI_MusicV3SelectPage_Album_Pic06.png
│ │ │ └── UI_MusicV3SelectPage_Album_Pic07.png
│ │ ├── UI_ActivitySmallIcon_Summertime_02.png
│ │ ├── UI_Activity_Steeplechase_DialogOfficialIcon.png
│ │ ├── UI_BtnFrame_W27.png
│ │ ├── UI_BtnIcon_PlayerBoy.png
│ │ ├── UI_BtnIcon_PlayerGirl.png
│ │ ├── UI_BtnIcon_SkillSet.png
│ │ ├── UI_ClockIcon_Dusk.png
│ │ ├── UI_ClockIcon_Morning.png
│ │ ├── UI_ClockIcon_Night.png
│ │ ├── UI_ClockIcon_Noon.png
│ │ ├── UI_EchoShell_Popo_Small.png
│ │ ├── UI_EmotionIcon100.png
│ │ ├── UI_EmotionIcon97.png
│ │ ├── UI_EmotionIcon98.png
│ │ ├── UI_EmotionIcon99.png
│ │ ├── UI_Frame_Equipped.png
│ │ ├── UI_GcgIcon_CardCurrency.png
│ │ ├── UI_HomeworldLevel_Coins_1.png
│ │ ├── UI_HomeworldLevel_Coins_2.png
│ │ ├── UI_HomeworldLevel_Coins_3.png
│ │ ├── UI_HomeworldLevel_Treasurebowl.png
│ │ ├── UI_Icon_Close.png
│ │ ├── UI_Icon_Explore.png
│ │ ├── UI_Icon_GcgBossChallenges_Difficulty.png
│ │ ├── UI_Icon_Intee_Explore_1.png
│ │ ├── UI_Icon_L.png
│ │ ├── UI_Icon_TimeSpeedUp_S.png
│ │ ├── UI_Icon_Tower_Star.png
│ │ ├── UI_Img_Aster_MainRewardS.png
│ │ ├── UI_Img_Cursor.png
│ │ ├── UI_Img_Cursor_PC.cur
│ │ ├── UI_Img_Cursor_PC.png
│ │ ├── UI_Img_Red.png
│ │ ├── UI_ItemIcon_100064.png
│ │ ├── UI_ItemIcon_105.png
│ │ ├── UI_ItemIcon_107012.png
│ │ ├── UI_ItemIcon_202.png
│ │ ├── UI_ItemIcon_204.png
│ │ ├── UI_ItemIcon_210.png
│ │ ├── UI_ItemIcon_211.png
│ │ ├── UI_ItemIcon_220021.png
│ │ ├── UI_ItemIcon_221.png
│ │ ├── UI_ItemIcon_222.png
│ │ ├── UI_LiYueShiLaiMu_Alpha.png
│ │ ├── UI_Mall_BannerBig1.png
│ │ ├── UI_Mall_BannerBig3.png
│ │ ├── UI_Mall_Purchase_Blessofmoon.png
│ │ ├── UI_Mall_Purchase_Resin_Monthly.png
│ │ ├── UI_MarkPoint_GcgZhanDou.png
│ │ ├── UI_MarkPoint_GeneralCargo.png
│ │ ├── UI_MarkPoint_Vintage.png
│ │ ├── UI_MarkQuest_Common_Proce.png
│ │ ├── UI_MarkQuest_Events_Proce.png
│ │ ├── UI_MarkQuest_Random_Proce.png
│ │ ├── UI_MarkTower.png
│ │ ├── UI_MarkTower_Daily.png
│ │ ├── UI_MarkTower_Tower.png
│ │ ├── UI_MarkTower_Weekly.png
│ │ ├── UI_NetstatIcon_1.png
│ │ ├── UI_NetstatIcon_2.png
│ │ ├── UI_NetstatIcon_3.png
│ │ ├── UI_Rename.py
│ │ ├── UI_SeaLamp_StoryPic_02_2.png
│ │ ├── UI_SummerTime_ImgCharacter_01.png
│ │ ├── UI_SummerTime_ImgDecorate_01.png
│ │ ├── UI_SummerTime_ImgDecorate_02.png
│ │ ├── UI_Tab_GachaShowPanel_Default.png
│ │ ├── UI_Tips_Item_Complete.png
│ │ ├── UI_Tips_Item_Quest.png
│ │ ├── UI_Tips_Item_Warning.png
│ │ ├── UI_TouchIcon_Auto.png
│ │ ├── e_tiangou.cbec2da1..png
│ │ ├── miyoushe.png
│ │ ├── prize_bg.0014ae02..png
│ │ └── stage_3_icon.02bbe66b..png
│ └── Logos
│ │ ├── Favicon.ico
│ │ ├── Favicon.png
│ │ ├── LargeTile.scale-100.png
│ │ ├── LargeTile.scale-125.png
│ │ ├── LargeTile.scale-150.png
│ │ ├── LargeTile.scale-200.png
│ │ ├── LargeTile.scale-400.png
│ │ ├── SmallTile.scale-100.png
│ │ ├── SmallTile.scale-125.png
│ │ ├── SmallTile.scale-150.png
│ │ ├── SmallTile.scale-200.png
│ │ ├── SmallTile.scale-400.png
│ │ ├── SplashScreen.scale-100.png
│ │ ├── SplashScreen.scale-125.png
│ │ ├── SplashScreen.scale-150.png
│ │ ├── SplashScreen.scale-200.png
│ │ ├── SplashScreen.scale-400.png
│ │ ├── Square150x150Logo.scale-100.png
│ │ ├── Square150x150Logo.scale-125.png
│ │ ├── Square150x150Logo.scale-150.png
│ │ ├── Square150x150Logo.scale-200.png
│ │ ├── Square150x150Logo.scale-400.png
│ │ ├── Square44x44Logo.altform-lightunplated_targetsize-16.png
│ │ ├── Square44x44Logo.altform-lightunplated_targetsize-24.png
│ │ ├── Square44x44Logo.altform-lightunplated_targetsize-256.png
│ │ ├── Square44x44Logo.altform-lightunplated_targetsize-32.png
│ │ ├── Square44x44Logo.altform-lightunplated_targetsize-48.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-16.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-24.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-256.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-32.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-48.png
│ │ ├── Square44x44Logo.scale-100.png
│ │ ├── Square44x44Logo.scale-125.png
│ │ ├── Square44x44Logo.scale-150.png
│ │ ├── Square44x44Logo.scale-200.png
│ │ ├── Square44x44Logo.scale-400.png
│ │ ├── Square44x44Logo.targetsize-16.png
│ │ ├── Square44x44Logo.targetsize-24.png
│ │ ├── Square44x44Logo.targetsize-256.png
│ │ ├── Square44x44Logo.targetsize-32.png
│ │ ├── Square44x44Logo.targetsize-48.png
│ │ ├── StoreLogo.scale-100.png
│ │ ├── StoreLogo.scale-125.png
│ │ ├── StoreLogo.scale-150.png
│ │ ├── StoreLogo.scale-200.png
│ │ ├── StoreLogo.scale-400.png
│ │ ├── Wide310x150Logo.scale-100.png
│ │ ├── Wide310x150Logo.scale-125.png
│ │ ├── Wide310x150Logo.scale-150.png
│ │ ├── Wide310x150Logo.scale-200.png
│ │ └── Wide310x150Logo.scale-400.png
├── Behaviors
│ ├── NavigationViewHeaderBehavior.cs
│ └── NavigationViewHeaderMode.cs
├── Contracts
│ ├── Services
│ │ ├── IActivationService.cs
│ │ ├── IAppNotificationService.cs
│ │ ├── ILocalSettingsService.cs
│ │ ├── INavigationService.cs
│ │ ├── INavigationViewService.cs
│ │ ├── IPageService.cs
│ │ ├── IThemeSelectorService.cs
│ │ └── IWebViewService.cs
│ └── ViewModels
│ │ ├── INavigationAware.cs
│ │ └── MainViewModel.cs
├── Controls
│ ├── Bubble
│ │ └── Bubble.cs
│ ├── Image
│ │ └── ImageHelper.cs
│ ├── ListView
│ │ └── ListViewHelper.cs
│ ├── MessageBox
│ │ ├── MessageBoxX.xaml
│ │ └── MessageBoxX.xaml.cs
│ ├── Notice
│ │ ├── NoticeService.cs
│ │ └── ToastContentBuilderExtensions.cs
│ ├── SettingCard
│ │ ├── SettingCard.xaml
│ │ └── SettingCard.xaml.cs
│ └── Window
│ │ └── WindowX.cs
├── GenshinSwitch.csproj
├── GlobalSuppressions.cs
├── GlobalUsing.cs
├── Helpers
│ ├── AssemblyUtils.cs
│ ├── AutoStart
│ │ ├── AutoStartManager.cs
│ │ ├── AutoStartProgramDataHelper.cs
│ │ ├── AutoStartRegistyHelper.cs
│ │ └── IAutoStartHelper.cs
│ ├── BrushExtension.cs
│ ├── CancelabledTask.cs
│ ├── ClipboardHelper.cs
│ ├── CommandLineHelper.cs
│ ├── FrameExtensions.cs
│ ├── GenerateChineseWords.cs
│ ├── MapperExtension.cs
│ ├── NavigationHelper.cs
│ ├── ResourceExtensions.cs
│ ├── RuntimeHelper.cs
│ ├── SecurityControlHelper.cs
│ ├── SettingsStorageExtensions.cs
│ ├── ShortcutCreator.cs
│ └── TitleBarHelper.cs
├── MainWindow.xaml
├── MainWindow.xaml.cs
├── Models
│ ├── Contacts
│ │ ├── Contact.cs
│ │ ├── Contact.vm.cs
│ │ └── ContactMapperProvider.cs
│ ├── LocalAvatars.cs
│ ├── LocalSettingsOptions.cs
│ ├── Messages
│ │ ├── AutoMuteChangedMessage.cs
│ │ ├── ContactMessage.cs
│ │ └── ThemeChangedMessage.cs
│ └── Settings.cs
├── Pack.cs
├── Package.appxmanifest
├── Program.cs
├── Properties
│ ├── PublishProfiles
│ │ └── FolderProfile.pubxml
│ └── launchsettings.json
├── README.md
├── Services
│ ├── ActivationService.cs
│ ├── AppNotificationService.cs
│ ├── LocalSettingsService.cs
│ ├── NavigationService.cs
│ ├── NavigationViewService.cs
│ ├── PageService.cs
│ ├── ThemeSelectorService.cs
│ └── WebViewService.cs
├── Strings
│ ├── en-us
│ │ └── Resources.resw
│ └── zh-cn
│ │ └── Resources.resw
├── Styles
│ ├── ButtonStyle.xaml
│ ├── FontSizes.xaml
│ ├── FontStyle.xaml
│ ├── FontSymbols.cs
│ ├── TextBlock.xaml
│ └── Thickness.xaml
├── ViewModels
│ ├── AddContactSelectionViewModel.cs
│ ├── AddContactViewModel.cs
│ ├── Contacts
│ │ ├── ContactProgress.cs
│ │ ├── ContactProgressValue.cs
│ │ ├── ContactViewModel.cs
│ │ ├── DailyNoteInfoViewModel.cs
│ │ ├── LazyInfoViewModel.cs
│ │ ├── SignInInfoViewModel.cs
│ │ └── SpiralAbyssInfoViewModel.cs
│ ├── MainViewModel.cs
│ ├── SetLazyTokenViewModel.cs
│ ├── SettingsContactProgressViewModel.cs
│ ├── SettingsViewModel.cs
│ ├── ShellViewModel.cs
│ ├── ShowLazyViewModel.cs
│ └── WebViewViewModel.cs
├── Views
│ ├── AddContactContentDialog.xaml
│ ├── AddContactContentDialog.xaml.cs
│ ├── Converters
│ │ ├── BoolInvertConverter.cs
│ │ ├── BoolToVisibilityConverter.cs
│ │ ├── BoolToVisibilityReversedConverter.cs
│ │ ├── DateTimeOffsetToDayStringConverter.cs
│ │ ├── DateTimeOffsetToTimeStringConverter.cs
│ │ ├── DateTimeToDayStringConverter.cs
│ │ ├── DateTimeToTimeStringConverter.cs
│ │ ├── EnumToBooleanConverter.cs
│ │ ├── ExpeditionStatusToColorConverter.cs
│ │ ├── HoyolabSignInStatsStringConverter.cs
│ │ ├── IsNullOrEmptyConverter.cs
│ │ ├── IsNullOrEmptyToVisibilityConverter.cs
│ │ ├── LazyInfoStatsStringConverter.cs
│ │ ├── LazyNetstatIconConverter.cs
│ │ ├── QuestEventStatsConverter.cs
│ │ ├── QuestRandomProceIconConverter.cs
│ │ ├── ResinBrushHintConverter.cs
│ │ ├── StringConcatConverter.cs
│ │ ├── TreasurebowCoinsIconConverter.cs
│ │ └── UriStringToImageSourceConverter.cs
│ ├── LaunchWindow.xaml
│ ├── LaunchWindow.xaml.cs
│ ├── MainPage.xaml
│ ├── MainPage.xaml.cs
│ ├── SetLazyTokenContentDialog.xaml
│ ├── SetLazyTokenContentDialog.xaml.cs
│ ├── SettingsPage.xaml
│ ├── SettingsPage.xaml.cs
│ ├── ShellPage.xaml
│ ├── ShellPage.xaml.cs
│ ├── ShowLazyContentDialog.xaml
│ ├── ShowLazyContentDialog.xaml.cs
│ ├── WebViewPage.xaml
│ └── WebViewPage.xaml.cs
├── app.manifest
└── appsettings.json
├── Xunkong.Core
├── .gitignore
├── ChannelType.cs
├── ElementType.cs
├── EnumExtension.cs
├── PlatformType.cs
├── PropertyType.cs
├── RegionHelper.cs
├── RegionType.cs
├── WeaponType.cs
├── Xunkong.Core.csproj
└── XunkongException.cs
└── Xunkong.Hoyolab
├── .gitignore
├── Account
├── GenshinRoleInfo.cs
├── GenshinRoleInfoWrapper.cs
├── HoyolabUserInfo.cs
├── HoyolabUserInfoWrapper.cs
├── SignInInfo.cs
├── SignInRisk.cs
└── SignTodayJsonConverter.cs
├── Activity
├── Activity.cs
├── Announcement.cs
├── BirthdayStarIndex.cs
└── CalendarInfo.cs
├── Avatar
├── AvatarCalculate.cs
├── AvatarConstellation.cs
├── AvatarCostume.cs
├── AvatarDetail.cs
├── AvatarDetailWrapper.cs
├── AvatarInfo.cs
├── AvatarReliquary.cs
├── AvatarSkill.cs
├── AvatarWeapon.cs
├── ReliquaryAffix.cs
└── ReliquarySet.cs
├── DailyNote
├── DailyNoteInfo.cs
├── Expedition.cs
├── RecoveryTimeJsonConverter.cs
├── Transformer.cs
└── TransformerRecoveryTime.cs
├── DynamicSecret.cs
├── GameRecord
├── GameRecordSummary.cs
├── PlayerRiskStats.cs
├── PotHome.cs
├── WorldExploration.cs
├── WorldExplorationOffering.cs
└── WorldExplorationRewardType.cs
├── GlobalUsing.cs
├── HoyolabBaseWrapper.cs
├── HoyolabClient.cs
├── HoyolabException.cs
├── HoyolabJsonContext.cs
├── ListWrapper.cs
├── News
├── NewsDetailWrapper.cs
├── NewsItem.cs
├── NewsListWrapper.cs
├── NewsPost.cs
├── NewsTimeJsonConverter.cs
└── NewsType.cs
├── SpiralAbyss
├── SpiralAbyssAvatar.cs
├── SpiralAbyssBattle.cs
├── SpiralAbyssFloor.cs
├── SpiralAbyssInfo.cs
├── SpiralAbyssLevel.cs
├── SpiralAbyssRank.cs
└── SpiralAbyssTimeJsonConverter.cs
├── TravelNotes
├── TravelNotesAwardItem.cs
├── TravelNotesAwardType.cs
├── TravelNotesBase.cs
├── TravelNotesDateJsonConverter.cs
├── TravelNotesDateTimeJsonConverter.cs
├── TravelNotesDayData.cs
├── TravelNotesDetail.cs
├── TravelNotesMonthData.cs
├── TravelNotesPrimogemsMonthGroupStats.cs
└── TravelNotesSummary.cs
├── Wishlog
├── QueryParam.cs
├── WishEventInfo.cs
├── WishType.cs
├── WishTypeJsonConverter.cs
├── WishlogBackup.cs
├── WishlogClient.cs
├── WishlogItem.cs
├── WishlogJsonContext.cs
└── WishlogWrapper.cs
└── Xunkong.Hoyolab.csproj
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.7z
2 | *.exe
3 | src/obj/*
4 | src/bin/*
5 | src/.vs/*
6 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 ema
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | **⚠️ 由于不好维护需要管理员权限的 WinUI 应用,该项目目前停止了维护,可移步到 [Fischless](https://github.com/GenshinMatrix/Fischless) 获得类似功能。**
4 |
5 | # GenshinSwitch
6 |
7 | 
8 |
9 | [](https://github.com/emako/genshin-switch/releases)
10 | [](https://github.com/emako/genshin-switch/releases)
11 |
12 | > GenshinSwitch 2.x系列 for Windows
13 | >
14 | > - [x] 原神账号快速切换工具(国服/国际服)
15 | > - [x] 米游社实时便签等接口支持(国服)
16 |
17 | ## 截图
18 |
19 | 
20 |
21 | 
22 |
23 | 
24 |
25 | ## 使用方法
26 |
27 | 1. 登录游戏账号1点击「添加」,比如添加保存为大号
28 | 2. 再登录游戏账号2点击「添加」,比如添加保存为小号
29 | 3. 双击保存的大号或小号即可自动登录
30 | 4. 可添加Cookie支持米游社接口的实时便签提醒
31 |
32 | ## 其他说明
33 |
34 | - 本程序的1.x系列已停止维护并转入[legacy](https://github.com/genshin-matrix/genshin-switch/tree/legacy)分支
35 | - 需要管理员权限是因为游戏要管理员权限启动
36 | - 选中账号右键可以使用「缓启动」(自动3分钟后启动,方便循环打大世界BOSS材料)
37 |
38 | ## 常见问题
39 |
40 | - 若安装包无法安装,请确保你的系统已安装应用商店,安装包依赖商店架构 (MSIX)。
41 | - 运行环境是net6.0-windows10.0.19041.0。
42 |
43 | ## 功能列表
44 |
45 | 1. 原神账号快速切换工具(国服/国际服)
46 | 2. 米游社实时便签等接口支持(国服)
47 | 3. 游戏自动静音,当游戏退出前台窗口状态时自动静音
48 | 4. 咕咕鸡接口(私有库)
49 |
50 | ## 路线图
51 |
52 | [ROADMAP.md](ROADMAP.md)
53 |
54 | ## 许可证
55 |
56 | [MIT License](https://github.com/genshin-matrix/genshin-switch/blob/main/LICENSE)
57 |
58 | ## 特别鸣谢
59 |
60 | [xunkong](https://github.com/xunkong/xunkong)
61 |
62 |
--------------------------------------------------------------------------------
/ROADMAP.md:
--------------------------------------------------------------------------------
1 | # Genshin Switch
2 |
3 | ## Roadmap
4 |
5 | 1期工程剩余:
6 |
7 | - [x] 所有接口展示
8 | - [x] 每日世界任务服务器查看
9 | - [x] 开机启动(包形式编译除外)
10 | - [x] 托盘右键菜单
11 | - [x] 主窗口关闭自动托盘
12 | - [ ] 自动静音
13 | - [ ] 代理获取Cookie
14 | - [ ] 设定游戏目录
15 | - [ ] 手动指定目录
16 | - [ ] 读取当前游戏进程信息获取游戏目录
17 | - [ ] 恢复游戏注册表
18 |
19 | - [ ] 咕咕鸡高级
20 | - [x] 设定咕咕鸡令牌
21 | - [ ] 咕咕鸡检查更新
22 | - [ ] 咕咕鸡下载
23 |
24 | - [ ] 预留启动协议
25 | - [ ] 统计游戏时长
26 | - [ ] 上架微软商店
27 |
28 | ---
29 |
30 | 2期工程剩余:
31 |
32 | - [ ] 桌面小树脂
33 | - [ ] 第三方组件
34 | - [ ] 快捷指令
35 | - [ ] 游戏系统菜单栏快捷指令
36 | - [ ] 启动游戏
37 | - [ ] 启动云游戏
38 | - [ ] 启动第三方组件
39 | - [ ] 启动自定义组件(TBD)
40 | - [ ] 启动安卓子系统米游社
41 | - [ ] 解包组件(贴图/音轨/视频)
42 |
43 | - [ ] 优化重复接口
44 | - [ ] 跨日获取米游社签到
45 |
46 | - [ ] 跨4点获取每日世界任务
47 | - [ ] 自定义网页
48 | - [ ] 祈愿记录服务
49 | - [ ] 优化图层内存(非必须)
50 | - [ ] 解锁帧数
51 |
52 | ---
53 |
54 | 3期工程剩余:
55 |
56 | - [ ] 原神模型预览
57 | - [ ] 成就OCR
58 | - [ ] 黄历(预览版)
59 | - [ ] 圣遗物预期
60 |
61 | ---
62 |
63 | 4期工程剩余:
64 |
65 | - [ ] 圣遗物评分
66 |
67 |
--------------------------------------------------------------------------------
/assets/account.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GenshinMatrix/genshin-switch/3559c6ea493ca8fe684bc637b31bc3dd521824ea/assets/account.png
--------------------------------------------------------------------------------
/assets/main.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GenshinMatrix/genshin-switch/3559c6ea493ca8fe684bc637b31bc3dd521824ea/assets/main.png
--------------------------------------------------------------------------------
/assets/settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GenshinMatrix/genshin-switch/3559c6ea493ca8fe684bc637b31bc3dd521824ea/assets/settings.png
--------------------------------------------------------------------------------
/src/.gitignore:
--------------------------------------------------------------------------------
1 | .vs/
2 |
--------------------------------------------------------------------------------
/src/.vsconfig:
--------------------------------------------------------------------------------
1 | {
2 | "version": "1.0",
3 | "components": [
4 | "Microsoft.Component.MSBuild",
5 | "Microsoft.NetCore.Component.Runtime.6.0",
6 | "Microsoft.NetCore.Component.SDK",
7 | "Microsoft.VisualStudio.Component.ManagedDesktop.Core",
8 | "Microsoft.VisualStudio.Component.ManagedDesktop.Prerequisites",
9 | "Microsoft.VisualStudio.Component.NuGet",
10 | "Microsoft.VisualStudio.Component.Windows10SDK.19041",
11 | "Microsoft.VisualStudio.Component.Windows10SDK",
12 | "Microsoft.VisualStudio.ComponentGroup.MSIX.Packaging",
13 | "Microsoft.VisualStudio.ComponentGroup.WindowsAppSDK.Cs",
14 | "Microsoft.VisualStudio.Workload.ManagedDesktop"
15 | ]
16 | }
--------------------------------------------------------------------------------
/src/GenshinSwitch.Analyze/.gitignore:
--------------------------------------------------------------------------------
1 | bin/
2 | obj/
3 |
--------------------------------------------------------------------------------
/src/GenshinSwitch.Analyze/AppCenterException.cs:
--------------------------------------------------------------------------------
1 | namespace GenshinSwitch.Analyze;
2 |
3 | public class AppCenterDummyException : Exception
4 | {
5 | public AppCenterDummyException(string message) : base(message)
6 | {
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/GenshinSwitch.Analyze/GenshinSwitch.Analyze.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | net6.0
5 | enable
6 | enable
7 | x64
8 | 11.0
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/GenshinSwitch.Core/.gitignore:
--------------------------------------------------------------------------------
1 | bin/
2 | obj/
3 |
--------------------------------------------------------------------------------
/src/GenshinSwitch.Core/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Runtime.CompilerServices;
2 |
3 | [assembly: InternalsVisibleTo("GenshinSwitch")]
4 |
--------------------------------------------------------------------------------
/src/GenshinSwitch.Core/Contracts/Services/IFileService.cs:
--------------------------------------------------------------------------------
1 | namespace GenshinSwitch.Core.Contracts.Services;
2 |
3 | public interface IFileService
4 | {
5 | T Read(string folderPath, string fileName);
6 |
7 | void Save(string folderPath, string fileName, T content);
8 |
9 | void Delete(string folderPath, string fileName);
10 | }
11 |
--------------------------------------------------------------------------------
/src/GenshinSwitch.Core/Contracts/Services/ISpecialPathService.cs:
--------------------------------------------------------------------------------
1 | namespace GenshinSwitch.Core.Contracts.Services;
2 |
3 | public interface ISpecialPathService
4 | {
5 | string GetFolder(string optionFolder);
6 | string GetPath(string baseName);
7 | string GetTempPath(string baseName);
8 | }
9 |
--------------------------------------------------------------------------------
/src/GenshinSwitch.Core/GenshinSwitch.Core.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | net6.0
4 | GenshinSwitch.Core
5 | x64
6 | 11.0
7 | enable
8 | enable
9 | true
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/GenshinSwitch.Core/GenshinSwitch.Core.csproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/GenshinSwitch.Core/GenshinSwitchException.cs:
--------------------------------------------------------------------------------
1 | namespace GenshinSwitch.Core;
2 |
3 | public class GenshinSwitchException : Exception
4 | {
5 | public GenshinSwitchException()
6 | {
7 | }
8 |
9 | public GenshinSwitchException(string? message) : base(message)
10 | {
11 | }
12 |
13 | public GenshinSwitchException(string? message, Exception? innerException) : base(message, innerException)
14 | {
15 | }
16 |
17 | public GenshinSwitchException(Exception? innerException) : base(null!, innerException)
18 | {
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/GenshinSwitch.Core/Helpers/Json.cs:
--------------------------------------------------------------------------------
1 | using YamlDotNet.Serialization;
2 |
3 | namespace GenshinSwitch.Core.Helpers;
4 |
5 | public static class Json
6 | {
7 | public static async Task ToObjectAsync(string value)
8 | {
9 | return await Task.Run(() =>
10 | {
11 | Deserializer deserializer = new();
12 | return deserializer.Deserialize(value);
13 | });
14 | }
15 |
16 | public static async Task StringifyAsync(object value)
17 | {
18 | return await Task.Run(() =>
19 | {
20 | Serializer serializer = new();
21 | return serializer.Serialize(value!);
22 | });
23 | }
24 | }
--------------------------------------------------------------------------------
/src/GenshinSwitch.Core/Helpers/Yaml.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 |
3 | namespace GenshinSwitch.Core.Helpers;
4 |
5 | public static class Yaml
6 | {
7 | public static async Task ToObjectAsync(string value)
8 | {
9 | return await Task.Run(() =>
10 | {
11 | // todo
12 | return JsonConvert.DeserializeObject(value)!;
13 | });
14 | }
15 |
16 | public static async Task StringifyAsync(object value)
17 | {
18 | return await Task.Run(() =>
19 | {
20 | // todo
21 | return JsonConvert.SerializeObject(value);
22 | });
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/GenshinSwitch.Core/README.md:
--------------------------------------------------------------------------------
1 | *Recommended Markdown Viewer: [Markdown Editor](https://marketplace.visualstudio.com/items?itemName=MadsKristensen.MarkdownEditor2)*
2 |
3 | ## Getting Started
4 |
5 | The Core project contains code that can be [reused across multiple application projects](https://docs.microsoft.com/dotnet/standard/net-standard#net-5-and-net-standard).
6 |
--------------------------------------------------------------------------------
/src/GenshinSwitch.Core/Services/FileService.cs:
--------------------------------------------------------------------------------
1 | using GenshinSwitch.Core.Contracts.Services;
2 | using Newtonsoft.Json;
3 | using System.Text;
4 |
5 | namespace GenshinSwitch.Core.Services;
6 |
7 | public class FileService : IFileService
8 | {
9 | public T Read(string folderPath, string fileName)
10 | {
11 | string path = Path.Combine(folderPath, fileName);
12 |
13 | if (File.Exists(path))
14 | {
15 | string json = File.ReadAllText(path);
16 | return JsonConvert.DeserializeObject(json)!;
17 | }
18 | return default!;
19 | }
20 |
21 | public void Save(string folderPath, string fileName, T content)
22 | {
23 | if (!Directory.Exists(folderPath))
24 | {
25 | Directory.CreateDirectory(folderPath);
26 | }
27 |
28 | string fileContent = JsonConvert.SerializeObject(content, Formatting.Indented);
29 | File.WriteAllText(Path.Combine(folderPath, fileName), fileContent, Encoding.UTF8);
30 | }
31 |
32 | public void Delete(string folderPath, string fileName)
33 | {
34 | if (fileName != null && File.Exists(Path.Combine(folderPath, fileName)))
35 | {
36 | File.Delete(Path.Combine(folderPath, fileName));
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/GenshinSwitch.Core/Services/SpecialPathService.cs:
--------------------------------------------------------------------------------
1 | using GenshinSwitch.Core.Contracts.Services;
2 |
3 | namespace GenshinSwitch.Core.Services;
4 |
5 | public class SpecialPathService : ISpecialPathService
6 | {
7 | private const string _defaultApplicationDataFolder = "genshin-switch";
8 | private readonly static string _localApplicationData = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
9 |
10 | internal static SpecialPathService Provider => new();
11 | public static string TempPath { get; } = Path.GetTempPath();
12 |
13 | public string GetFolder(string optionFolder = null!)
14 | {
15 | return Path.Combine(_localApplicationData, optionFolder ?? _defaultApplicationDataFolder);
16 | }
17 |
18 | public string GetPath(string baseName)
19 | {
20 | string configPath = Path.Combine(GetFolder(), baseName);
21 |
22 | if (!Directory.Exists(new FileInfo(configPath).DirectoryName))
23 | {
24 | Directory.CreateDirectory(new FileInfo(configPath).DirectoryName!);
25 | }
26 | return configPath;
27 | }
28 |
29 | public string GetTempPath(string baseName)
30 | {
31 | return Path.Combine(TempPath + _defaultApplicationDataFolder, baseName);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/GenshinSwitch.Core/Settings/SettingsCache.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Concurrent;
2 |
3 | namespace GenshinSwitch.Core.Settings;
4 |
5 | internal class SettingsCache : ConcurrentDictionary
6 | {
7 | public T Get(SettingsDefinition definition)
8 | {
9 | string key = definition.Name;
10 | T defaultValue = definition.DefaultValue;
11 | Func