├── Sheas-Cealer-Logo.ico
├── Consts
├── SettingsConst.cs
├── AboutConst.cs
├── MainConst.cs
├── AboutMultilangConst.Designer.cs
├── AboutMultilangConst.zh.resx
├── SettingsMultilangConst.zh.resx
├── SettingsMultilangConst.resx
├── AboutMultilangConst.resx
├── SettingsMultilangConst.Designer.cs
├── MainMultilangConst.zh.resx
├── MainMultilangConst.resx
└── MainMultilangConst.Designer.cs
├── Proces
├── MihomoProc.cs
├── ComihomoProc.cs
├── NginxProc.cs
├── ConginxProc.cs
└── BrowserProc.cs
├── Preses
├── AboutPres.cs
├── GlobalPres.cs
├── SettingsPres.cs
└── MainPres.cs
├── Convs
├── AboutConv.cs
├── SettingsConv.cs
├── MainWinWidthConv.cs
├── MainAdminControlVisibilityConv.cs
├── MainProxyColumnWidthConv.cs
├── AboutAccentButtonForegroundConv.cs
├── MainUpdateHostButtonIsEnabledConv.cs
├── MainNoClickButtonContentConv.cs
├── MainNoClickButtonToolTipConv.cs
├── MainMihomoButtonToolTipConv.cs
├── MainUpdateHostButtonContentConv.cs
├── MainNginxButtonToolTipConv.cs
├── AboutVersionButtonContentConv.cs
├── MainBrowserButtonIsEnabledConv.cs
├── SettingsThemesButtonContentConv.cs
├── SettingsLangsButtonContentConv.cs
├── SettingsWeightsButtonContentConv.cs
├── MainMihomoButtonIsEnabledConv.cs
├── MainNginxButtonIsEnabledConv.cs
├── MainNginxButtonContentConv.cs
├── MainSettingsBoxToolTipConv.cs
├── MainSettingsModeButtonContentConv.cs
├── MainSettingsBoxHintConv.cs
├── MainSettingsFunctionButtonContentConv.cs
├── MainSettingsBoxTextConv.cs
├── MainMihomoButtonContentConv.cs
└── MainConv.cs
├── Utils
├── DnsFlusher.cs
├── BorderThemeSetter.cs
├── NginxCleaner.cs
├── IconRemover.cs
└── ForegroundGenerator.cs
├── Props
├── Settings.settings
└── Settings.Designer.cs
├── App.xaml
├── Wins
├── SettingsWin.xaml
├── AboutWin.xaml.cs
├── SettingsWin.xaml.cs
├── AboutWin.xaml
└── MainWin.xaml
├── .filenesting.json
├── App.xaml.cs
├── Sheas-Cealer.sln
├── .gitattributes
├── README.md
├── README_EN.md
├── Sheas-Cealer.csproj
└── .gitignore
/Sheas-Cealer-Logo.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SpaceTimee/Sheas-Cealer/HEAD/Sheas-Cealer-Logo.ico
--------------------------------------------------------------------------------
/Consts/SettingsConst.cs:
--------------------------------------------------------------------------------
1 | namespace Sheas_Cealer.Consts;
2 |
3 | internal abstract class SettingsConst : SettingsMultilangConst;
--------------------------------------------------------------------------------
/Proces/MihomoProc.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using Sheas_Core;
3 |
4 | namespace Sheas_Cealer.Proces;
5 |
6 | internal class MihomoProc : Proc
7 | {
8 | internal MihomoProc() : base(MainConst.MihomoPath) { }
9 | }
--------------------------------------------------------------------------------
/Proces/ComihomoProc.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using Sheas_Core;
3 |
4 | namespace Sheas_Cealer.Proces;
5 |
6 | internal class ComihomoProc : Proc
7 | {
8 | internal ComihomoProc() : base(MainConst.ComihomoPath) { }
9 | }
--------------------------------------------------------------------------------
/Preses/AboutPres.cs:
--------------------------------------------------------------------------------
1 | using CommunityToolkit.Mvvm.ComponentModel;
2 |
3 | namespace Sheas_Cealer.Preses;
4 |
5 | internal partial class AboutPres : GlobalPres
6 | {
7 | [ObservableProperty]
8 | private bool isSheasCealerUtd = true;
9 | }
--------------------------------------------------------------------------------
/Convs/AboutConv.cs:
--------------------------------------------------------------------------------
1 | namespace Sheas_Cealer.Convs;
2 |
3 | internal static class AboutConv
4 | {
5 | public static AboutAccentButtonForegroundConv AboutAccentButtonForegroundConv => new();
6 | public static AboutVersionButtonContentConv AboutVersionButtonContentConv => new();
7 | }
--------------------------------------------------------------------------------
/Utils/DnsFlusher.cs:
--------------------------------------------------------------------------------
1 | using System.Runtime.InteropServices;
2 |
3 | namespace Sheas_Cealer.Utils;
4 |
5 | internal static partial class DnsFlusher
6 | {
7 | [LibraryImport("dnsapi.dll")]
8 | private static partial void DnsFlushResolverCache();
9 |
10 | internal static void FlushDns() => DnsFlushResolverCache();
11 | }
12 |
--------------------------------------------------------------------------------
/Convs/SettingsConv.cs:
--------------------------------------------------------------------------------
1 | namespace Sheas_Cealer.Convs;
2 |
3 | internal static class SettingsConv
4 | {
5 | public static SettingsLangsButtonContentConv SettingsLangsButtonContentConv => new();
6 | public static SettingsThemesButtonContentConv SettingsThemesButtonContentConv => new();
7 | public static SettingsWeightsButtonContentConv SettingsWeightsButtonContentConv => new();
8 | }
--------------------------------------------------------------------------------
/Proces/NginxProc.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using Sheas_Cealer.Utils;
3 | using Sheas_Core;
4 | using System;
5 |
6 | namespace Sheas_Cealer.Proces;
7 |
8 | internal class NginxProc : Proc
9 | {
10 | internal NginxProc() : base(MainConst.NginxPath) { }
11 |
12 | protected override async void Process_Exited(object? sender, EventArgs e) => await NginxCleaner.Clean();
13 | }
--------------------------------------------------------------------------------
/Proces/ConginxProc.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using Sheas_Cealer.Utils;
3 | using Sheas_Core;
4 | using System;
5 |
6 | namespace Sheas_Cealer.Proces;
7 |
8 | internal class ConginxProc : Proc
9 | {
10 | internal ConginxProc() : base(MainConst.ConginxPath) { }
11 |
12 | protected override async void Process_Exited(object? sender, EventArgs e) => await NginxCleaner.Clean();
13 | }
--------------------------------------------------------------------------------
/Convs/MainWinWidthConv.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Globalization;
3 | using System.Windows.Data;
4 |
5 | namespace Sheas_Cealer.Convs;
6 |
7 | internal class MainWinWidthConv : IValueConverter
8 | {
9 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
10 | {
11 | bool isAdmin = (bool)value;
12 |
13 | return isAdmin ? 708 : 500;
14 | }
15 |
16 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
17 | }
--------------------------------------------------------------------------------
/Proces/BrowserProc.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Core;
2 | using System;
3 | using System.Windows;
4 |
5 | namespace Sheas_Cealer.Proces;
6 |
7 | internal class BrowserProc : Proc
8 | {
9 | private readonly bool ShutDownAppOnProcessExit;
10 |
11 | internal BrowserProc(string browserPath, bool shutDownAppOnProcessExit) : base(browserPath) => ShutDownAppOnProcessExit = shutDownAppOnProcessExit;
12 |
13 | protected sealed override void Process_Exited(object? sender, EventArgs e)
14 | {
15 | if (ShutDownAppOnProcessExit)
16 | Application.Current.Dispatcher.InvokeShutdown();
17 | }
18 | }
--------------------------------------------------------------------------------
/Convs/MainAdminControlVisibilityConv.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Globalization;
3 | using System.Windows;
4 | using System.Windows.Data;
5 |
6 | namespace Sheas_Cealer.Convs;
7 |
8 | internal class MainAdminControlVisibilityConv : IValueConverter
9 | {
10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
11 | {
12 | bool isAdmin = (bool)value;
13 |
14 | return isAdmin ? Visibility.Visible : Visibility.Collapsed;
15 | }
16 |
17 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
18 | }
--------------------------------------------------------------------------------
/Convs/MainProxyColumnWidthConv.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Globalization;
3 | using System.Windows;
4 | using System.Windows.Data;
5 |
6 | namespace Sheas_Cealer.Convs;
7 |
8 | internal class MainProxyColumnWidthConv : IValueConverter
9 | {
10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
11 | {
12 | bool isAdmin = (bool)value;
13 |
14 | return new GridLength(1, isAdmin ? GridUnitType.Star : GridUnitType.Auto);
15 | }
16 |
17 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
18 | }
--------------------------------------------------------------------------------
/Convs/AboutAccentButtonForegroundConv.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Globalization;
3 | using System.Windows.Data;
4 | using System.Windows.Media;
5 |
6 | namespace Sheas_Cealer.Convs;
7 |
8 | internal class AboutAccentButtonForegroundConv : IValueConverter
9 | {
10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
11 | {
12 | Color accentForegroundColor = (Color)value;
13 |
14 | return new SolidColorBrush(accentForegroundColor);
15 | }
16 |
17 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
18 | }
--------------------------------------------------------------------------------
/Convs/MainUpdateHostButtonIsEnabledConv.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using System;
3 | using System.Globalization;
4 | using System.Windows.Data;
5 |
6 | namespace Sheas_Cealer.Convs;
7 |
8 | internal class MainUpdateHostButtonIsEnabledConv : IValueConverter
9 | {
10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
11 | {
12 | string upstreamUrl = (string)value;
13 |
14 | return MainConst.UpstreamUrlRegex().IsMatch(upstreamUrl);
15 | }
16 |
17 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
18 | }
--------------------------------------------------------------------------------
/Convs/MainNoClickButtonContentConv.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using System;
3 | using System.Globalization;
4 | using System.Windows.Data;
5 |
6 | namespace Sheas_Cealer.Convs;
7 |
8 | internal class MainNoClickButtonContentConv : IValueConverter
9 | {
10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
11 | {
12 | bool isFlashing = (bool)value;
13 |
14 | return isFlashing ? MainConst.NoClickButtonIsFlashingContent : MainConst.NoClickButtonIsStoppedContent;
15 | }
16 |
17 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
18 | }
--------------------------------------------------------------------------------
/Convs/MainNoClickButtonToolTipConv.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using System;
3 | using System.Globalization;
4 | using System.Windows.Data;
5 |
6 | namespace Sheas_Cealer.Convs;
7 |
8 | internal class MainNoClickButtonToolTipConv : IValueConverter
9 | {
10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
11 | {
12 | bool isFlashing = (bool)value;
13 |
14 | return isFlashing ? MainConst.NoClickButtonIsFlashingToolTip : MainConst.NoClickButtonIsStoppedToolTip;
15 | }
16 |
17 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
18 | }
--------------------------------------------------------------------------------
/Convs/MainMihomoButtonToolTipConv.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using System;
3 | using System.Globalization;
4 | using System.Windows.Data;
5 |
6 | namespace Sheas_Cealer.Convs;
7 |
8 | internal class MainMihomoButtonToolTipConv : IValueConverter
9 | {
10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
11 | {
12 | bool isMihomoRunning = (bool)value;
13 |
14 | return isMihomoRunning ? MainConst.MihomoButtonIsRunningToolTip : MainConst.MihomoButtonIsStoppedToolTip;
15 | }
16 |
17 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
18 | }
--------------------------------------------------------------------------------
/Convs/MainUpdateHostButtonContentConv.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using System;
3 | using System.Globalization;
4 | using System.Windows.Data;
5 |
6 | namespace Sheas_Cealer.Convs;
7 |
8 | internal class MainUpdateHostButtonContentConv : IValueConverter
9 | {
10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
11 | {
12 | bool isUpstreamHostUtd = (bool)value;
13 |
14 | return MainConst.UpdateUpstreamHostButtonContent + (isUpstreamHostUtd ? string.Empty : " *");
15 | }
16 |
17 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
18 | }
--------------------------------------------------------------------------------
/Convs/MainNginxButtonToolTipConv.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using System;
3 | using System.Globalization;
4 | using System.Windows.Data;
5 |
6 | namespace Sheas_Cealer.Convs;
7 |
8 | internal class MainNginxButtonToolTipConv : IMultiValueConverter
9 | {
10 | public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
11 | {
12 | bool isConginxRunning = (bool)values[0];
13 | bool isNginxRunning = (bool)values[1];
14 |
15 | return isConginxRunning || isNginxRunning ? MainConst.NginxButtonIsRunningToolTip : MainConst.NginxButtonIsStoppedToolTip;
16 | }
17 |
18 | public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) => throw new NotImplementedException();
19 | }
--------------------------------------------------------------------------------
/Convs/AboutVersionButtonContentConv.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Globalization;
3 | using System.Windows.Data;
4 |
5 | namespace Sheas_Cealer.Convs;
6 |
7 | internal class AboutVersionButtonContentConv : IMultiValueConverter
8 | {
9 | public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
10 | {
11 | string versionButtonLabelContent = (string)values[0];
12 | string versionButtonVersionContent = (string)values[1];
13 | bool isSheasCealerUtd = (bool)values[2];
14 |
15 | return $"{versionButtonLabelContent} {versionButtonVersionContent}" + (isSheasCealerUtd ? string.Empty : " *");
16 | }
17 |
18 | public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) => throw new NotImplementedException();
19 | }
--------------------------------------------------------------------------------
/Convs/MainBrowserButtonIsEnabledConv.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using System;
3 | using System.Globalization;
4 | using System.IO;
5 | using System.Windows.Data;
6 |
7 | namespace Sheas_Cealer.Convs;
8 |
9 | internal class MainBrowserButtonIsEnabledConv : IMultiValueConverter
10 | {
11 | public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
12 | {
13 | string browserPath = (string)values[0];
14 | string extraArgs = (string)values[1];
15 |
16 | return File.Exists(browserPath) && Path.GetFileName(browserPath).ToLowerInvariant().EndsWith(".exe") && MainConst.ExtraArgsRegex().IsMatch(extraArgs);
17 | }
18 |
19 | public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) => throw new NotImplementedException();
20 | }
--------------------------------------------------------------------------------
/Convs/SettingsThemesButtonContentConv.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using System;
3 | using System.Globalization;
4 | using System.Windows.Data;
5 |
6 | namespace Sheas_Cealer.Convs;
7 |
8 | internal class SettingsThemesButtonContentConv : IValueConverter
9 | {
10 | public object Convert(object? value, Type targetType, object parameter, CultureInfo culture)
11 | {
12 | bool? isLightMode = value as bool?;
13 |
14 | return isLightMode.HasValue ?
15 | isLightMode.GetValueOrDefault() ? SettingsConst.ThemesButtonLightThemeContent : SettingsConst.ThemesButtonDarkThemeContent :
16 | SettingsConst.ThemesButtonInheritThemeContent;
17 | }
18 |
19 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
20 | }
--------------------------------------------------------------------------------
/Convs/SettingsLangsButtonContentConv.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using System;
3 | using System.Globalization;
4 | using System.Windows.Data;
5 |
6 | namespace Sheas_Cealer.Convs;
7 |
8 | internal class SettingsLangsButtonContentConv : IValueConverter
9 | {
10 | public object Convert(object? value, Type targetType, object parameter, CultureInfo culture)
11 | {
12 | bool? isEnglishLang = value as bool?;
13 |
14 | return isEnglishLang.HasValue ?
15 | isEnglishLang.GetValueOrDefault() ? SettingsConst.LangsButtonEnglishLangContent : SettingsConst.LangsButtonChineseLangContent :
16 | SettingsConst.LangsButtonInheritLangContent;
17 | }
18 |
19 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
20 | }
--------------------------------------------------------------------------------
/Convs/SettingsWeightsButtonContentConv.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using System;
3 | using System.Globalization;
4 | using System.Windows.Data;
5 |
6 | namespace Sheas_Cealer.Convs;
7 |
8 | internal class SettingsWeightsButtonContentConv : IValueConverter
9 | {
10 | public object Convert(object? value, Type targetType, object parameter, CultureInfo culture)
11 | {
12 | bool? isLightWeight = value as bool?;
13 |
14 | return isLightWeight.HasValue ?
15 | isLightWeight.GetValueOrDefault() ? SettingsConst.WeightsButtonLightWeightContent : SettingsConst.WeightsButtonBoldWeightContent :
16 | SettingsConst.WeightsButtonRegularWeightContent;
17 | }
18 |
19 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
20 | }
--------------------------------------------------------------------------------
/Convs/MainMihomoButtonIsEnabledConv.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Globalization;
3 | using System.Windows.Data;
4 |
5 | namespace Sheas_Cealer.Convs;
6 |
7 | internal class MainMihomoButtonIsEnabledConv : IMultiValueConverter
8 | {
9 | public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
10 | {
11 | bool isCoMihomoExist = (bool)values[0];
12 | bool isMihomoExist = (bool)values[1];
13 | bool isCoproxyIniting = (bool)values[2];
14 | bool isComihomoIniting = (bool)values[3];
15 | bool isMihomoIniting = (bool)values[4];
16 |
17 | return !isCoproxyIniting && !isComihomoIniting && !isMihomoIniting && (isCoMihomoExist || isMihomoExist);
18 | }
19 |
20 | public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) => throw new NotImplementedException();
21 | }
--------------------------------------------------------------------------------
/Convs/MainNginxButtonIsEnabledConv.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Globalization;
3 | using System.Windows.Data;
4 |
5 | namespace Sheas_Cealer.Convs;
6 |
7 | internal class MainNginxButtonIsEnabledConv : IMultiValueConverter
8 | {
9 | public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
10 | {
11 | bool isConginxExist = (bool)values[0];
12 | bool isNginxExist = (bool)values[1];
13 | bool isCoproxyIniting = (bool)values[2];
14 | bool isNginxIniting = (bool)values[3];
15 | bool isComihomoIniting = (bool)values[4];
16 | bool isMihomoIniting = (bool)values[5];
17 |
18 | return !isCoproxyIniting && !isNginxIniting && !isComihomoIniting && !isMihomoIniting && (isConginxExist || isNginxExist);
19 | }
20 |
21 | public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) => throw new NotImplementedException();
22 | }
--------------------------------------------------------------------------------
/Convs/MainNginxButtonContentConv.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using System;
3 | using System.Globalization;
4 | using System.Windows.Data;
5 |
6 | namespace Sheas_Cealer.Convs;
7 |
8 | internal class MainNginxButtonContentConv : IMultiValueConverter
9 | {
10 | public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
11 | {
12 | bool isConginxRunning = (bool)values[0];
13 | bool isNginxRunning = (bool)values[1];
14 | bool isCoproxyIniting = (bool)values[2];
15 | bool isNginxIniting = (bool)values[3];
16 |
17 | return isCoproxyIniting ? MainConst.ConginxButtonIsInitingContent :
18 | isNginxIniting ? MainConst.NginxButtonIsInitingContent :
19 | isConginxRunning || isNginxRunning ? MainConst.NginxButtonIsRunningContent : MainConst.NginxButtonIsStoppedContent;
20 | }
21 |
22 | public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) => throw new NotImplementedException();
23 | }
--------------------------------------------------------------------------------
/Convs/MainSettingsBoxToolTipConv.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using System;
3 | using System.Diagnostics;
4 | using System.Globalization;
5 | using System.Windows.Data;
6 |
7 | namespace Sheas_Cealer.Convs;
8 |
9 | internal class MainSettingsBoxToolTipConv : IValueConverter
10 | {
11 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
12 | {
13 | MainConst.SettingsMode settingsMode = (MainConst.SettingsMode)value;
14 |
15 | return settingsMode switch
16 | {
17 | MainConst.SettingsMode.BrowserPathMode => MainConst.SettingsBoxBrowserPathToolTip,
18 | MainConst.SettingsMode.UpstreamUrlMode => MainConst.SettingsBoxUpstreamUrlToolTip,
19 | MainConst.SettingsMode.ExtraArgsMode => MainConst.SettingsBoxExtraArgsToolTip,
20 | _ => throw new UnreachableException()
21 | };
22 | }
23 |
24 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
25 | }
--------------------------------------------------------------------------------
/Convs/MainSettingsModeButtonContentConv.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using System;
3 | using System.Globalization;
4 | using System.Windows.Data;
5 |
6 | namespace Sheas_Cealer.Convs;
7 |
8 | internal class MainSettingsModeButtonContentConv : IValueConverter
9 | {
10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
11 | {
12 | MainConst.SettingsMode settingsMode = (MainConst.SettingsMode)value;
13 |
14 | return settingsMode switch
15 | {
16 | MainConst.SettingsMode.BrowserPathMode => MainConst.SettingsModeButtonUpstreamUrlContent,
17 | MainConst.SettingsMode.UpstreamUrlMode => MainConst.SettingsModeButtonExtraArgsContent,
18 | MainConst.SettingsMode.ExtraArgsMode => MainConst.SettingsModeButtonBrowserPathContent,
19 | _ => throw new NotImplementedException()
20 | };
21 | }
22 |
23 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
24 | }
--------------------------------------------------------------------------------
/Convs/MainSettingsBoxHintConv.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using System;
3 | using System.Diagnostics;
4 | using System.Globalization;
5 | using System.Windows.Data;
6 |
7 | namespace Sheas_Cealer.Convs;
8 |
9 | internal class MainSettingsBoxHintConv : IValueConverter
10 | {
11 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
12 | {
13 | MainConst.SettingsMode settingsMode = (MainConst.SettingsMode)value;
14 |
15 | return settingsMode switch
16 | {
17 | MainConst.SettingsMode.BrowserPathMode => MainConst.SettingsModeButtonBrowserPathContent,
18 | MainConst.SettingsMode.UpstreamUrlMode => MainConst.SettingsModeButtonUpstreamUrlContent,
19 | MainConst.SettingsMode.ExtraArgsMode => MainConst.SettingsModeButtonExtraArgsContent,
20 | _ => throw new UnreachableException()
21 | };
22 | }
23 |
24 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
25 | }
--------------------------------------------------------------------------------
/Convs/MainSettingsFunctionButtonContentConv.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using System;
3 | using System.Diagnostics;
4 | using System.Globalization;
5 | using System.Windows.Data;
6 |
7 | namespace Sheas_Cealer.Convs;
8 |
9 | internal class MainSettingsFunctionButtonContentConv : IValueConverter
10 | {
11 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
12 | {
13 | MainConst.SettingsMode settingsMode = (MainConst.SettingsMode)value;
14 |
15 | return settingsMode switch
16 | {
17 | MainConst.SettingsMode.BrowserPathMode => MainConst.SettingsFunctionButtonBrowserPathContent,
18 | MainConst.SettingsMode.UpstreamUrlMode => MainConst.SettingsFunctionButtonUpstreamUrlContent,
19 | MainConst.SettingsMode.ExtraArgsMode => MainConst.SettingsFunctionButtonExtraArgsContent,
20 | _ => throw new UnreachableException()
21 | };
22 | }
23 |
24 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
25 | }
--------------------------------------------------------------------------------
/Convs/MainSettingsBoxTextConv.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using System;
3 | using System.Diagnostics;
4 | using System.Globalization;
5 | using System.Windows.Data;
6 |
7 | namespace Sheas_Cealer.Convs;
8 |
9 | internal class MainSettingsBoxTextConv : IMultiValueConverter
10 | {
11 | public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
12 | {
13 | MainConst.SettingsMode settingsMode = (MainConst.SettingsMode)values[0];
14 | string browserPath = (string)values[1];
15 | string upstreamUrl = (string)values[2];
16 | string extraArgs = (string)values[3];
17 |
18 | return settingsMode switch
19 | {
20 | MainConst.SettingsMode.BrowserPathMode => browserPath,
21 | MainConst.SettingsMode.UpstreamUrlMode => upstreamUrl,
22 | MainConst.SettingsMode.ExtraArgsMode => extraArgs,
23 | _ => throw new UnreachableException()
24 | };
25 | }
26 |
27 | public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) => throw new NotImplementedException();
28 | }
--------------------------------------------------------------------------------
/Convs/MainMihomoButtonContentConv.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using System;
3 | using System.Globalization;
4 | using System.Windows.Data;
5 |
6 | namespace Sheas_Cealer.Convs;
7 |
8 | internal class MainMihomoButtonContentConv : IMultiValueConverter
9 | {
10 | public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
11 | {
12 | bool isMihomoRunning = (bool)values[0];
13 | bool isComihomoIniting = (bool)values[1];
14 | bool isMihomoIniting = (bool)values[2];
15 | bool isCoproxyIniting = (bool)values[3];
16 | bool isCoproxyStopping = (bool)values[4];
17 |
18 | return isCoproxyIniting || isCoproxyStopping ? Binding.DoNothing :
19 | isComihomoIniting ? MainConst.MihomoButtonIsStoppingContent :
20 | isMihomoIniting ? MainConst.MihomoButtonIsInitingContent :
21 | isMihomoRunning ? MainConst.MihomoButtonIsRunningContent : MainConst.MihomoButtonIsStoppedContent;
22 | }
23 |
24 | public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) => throw new NotImplementedException();
25 | }
--------------------------------------------------------------------------------
/Props/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | 244, 67, 54
16 |
17 |
18 | -1
19 |
20 |
21 | -1
22 |
23 |
24 | -1
25 |
26 |
27 | True
28 |
29 |
30 |
--------------------------------------------------------------------------------
/Utils/BorderThemeSetter.cs:
--------------------------------------------------------------------------------
1 | using System.Runtime.InteropServices;
2 | using System.Windows;
3 | using System.Windows.Interop;
4 |
5 | namespace Sheas_Cealer.Utils;
6 |
7 | internal static partial class BorderThemeSetter
8 | {
9 | private const int DwmwaUseImmersiveDarkModeOld = 19;
10 | private const int DwmwaUseImmersiveDarkMode = 20;
11 |
12 | [LibraryImport("dwmapi.dll")]
13 | private static partial void DwmGetWindowAttribute(nint hwnd, uint attr, out nint attrValue, uint attrSize);
14 | [LibraryImport("dwmapi.dll")]
15 | private static partial void DwmSetWindowAttribute(nint hwnd, uint attr, ref nint attrValue, uint attrSize);
16 |
17 | internal static void SetBorderTheme(Window window, bool? isLightTheme)
18 | {
19 | nint isDarkTheme;
20 | nint desktopHwnd = nint.Zero;
21 | nint windowHwnd = new WindowInteropHelper(window).EnsureHandle();
22 |
23 | if (isLightTheme.HasValue)
24 | isDarkTheme = !isLightTheme.Value ? 1 : 0;
25 | else
26 | DwmGetWindowAttribute(desktopHwnd, DwmwaUseImmersiveDarkMode, out isDarkTheme, (uint)Marshal.SizeOf(typeof(nint)));
27 |
28 | DwmSetWindowAttribute(windowHwnd, DwmwaUseImmersiveDarkModeOld, ref isDarkTheme, (uint)Marshal.SizeOf(typeof(nint)));
29 | DwmSetWindowAttribute(windowHwnd, DwmwaUseImmersiveDarkMode, ref isDarkTheme, (uint)Marshal.SizeOf(typeof(nint)));
30 | }
31 | }
--------------------------------------------------------------------------------
/Utils/NginxCleaner.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using System;
3 | using System.IO;
4 | using System.Security.Cryptography.X509Certificates;
5 | using System.Threading.Tasks;
6 |
7 | namespace Sheas_Cealer.Utils;
8 |
9 | internal static class NginxCleaner
10 | {
11 | internal static async Task Clean()
12 | {
13 | string hostsContent = await File.ReadAllTextAsync(MainConst.HostsConfPath);
14 | int hostsConfStartIndex = hostsContent.IndexOf(MainConst.HostsConfStartMarker, StringComparison.Ordinal);
15 | int hostsConfEndIndex = hostsContent.LastIndexOf(MainConst.HostsConfEndMarker, StringComparison.Ordinal);
16 |
17 | if (hostsConfStartIndex != -1 && hostsConfEndIndex != -1)
18 | await File.WriteAllTextAsync(MainConst.HostsConfPath, hostsContent.Remove(hostsConfStartIndex, hostsConfEndIndex - hostsConfStartIndex + MainConst.HostsConfEndMarker.Length));
19 |
20 | using X509Store certStore = new(StoreName.Root, StoreLocation.LocalMachine, OpenFlags.ReadWrite);
21 |
22 | foreach (X509Certificate2 storedCert in certStore.Certificates)
23 | if (storedCert.Subject == MainConst.NginxRootCertSubjectName)
24 | while (true)
25 | try
26 | {
27 | certStore.Remove(storedCert);
28 |
29 | break;
30 | }
31 | catch { }
32 |
33 | certStore.Close();
34 | }
35 | }
--------------------------------------------------------------------------------
/Consts/AboutConst.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Windows.Media;
3 |
4 | namespace Sheas_Cealer.Consts;
5 |
6 | internal abstract class AboutConst : AboutMultilangConst
7 | {
8 | public static Color AccentBlueColor => (Color)ColorConverter.ConvertFromString("#2196F3");
9 | public static Color AccentRedColor => (Color)ColorConverter.ConvertFromString("#F44336");
10 |
11 | public static string DeveloperButtonUrl => "https://www.spacetimee.xyz";
12 | public static string VersionButtonVersionContent => Assembly.GetExecutingAssembly().GetName().Version!.ToString()[..^2];
13 | public static string VersionButtonUrl => "https://github.com/SpaceTimee/Sheas-Cealer/releases/latest";
14 | public static string EmailButtonUrl => "Zeus6_6@163.com";
15 |
16 | public static string DocumentationButtonUrl => "https://github.com/SpaceTimee/Sheas-Cealer/wiki/Sheas-Cealer-Documentation";
17 | public static string RepositoryButtonUrl => "https://github.com/SpaceTimee/Sheas-Cealer";
18 |
19 | public static string PolicyButtonUrl => "https://thoughts.teambition.com/share/6264eda98adeb10041b92fda#title=Sheas_Cealer_隐私政策";
20 | public static string AgreementButtonUrl => "https://thoughts.teambition.com/share/6264edd78adeb10041b92fdb#title=Sheas_Cealer_使用协议";
21 |
22 | internal static string ReleaseApiUrl => "https://api.github.com/repos/SpaceTimee/Sheas-Cealer/releases/latest";
23 | internal static string ReleaseApiUserAgent => "Sheas-Cealer";
24 | }
--------------------------------------------------------------------------------
/Preses/GlobalPres.cs:
--------------------------------------------------------------------------------
1 | using CommunityToolkit.Mvvm.ComponentModel;
2 | using MaterialDesignThemes.Wpf;
3 | using Sheas_Cealer.Consts;
4 | using Sheas_Cealer.Props;
5 | using Sheas_Cealer.Utils;
6 | using System.Diagnostics;
7 | using System.Windows;
8 | using System.Windows.Media;
9 |
10 | namespace Sheas_Cealer.Preses;
11 |
12 | internal partial class GlobalPres : ObservableObject
13 | {
14 | internal GlobalPres()
15 | {
16 | IsLightTheme = Settings.Default.IsLightTheme switch
17 | {
18 | -1 => null,
19 | 0 => false,
20 | 1 => true,
21 | _ => throw new UnreachableException()
22 | };
23 | }
24 |
25 | [ObservableProperty]
26 | private static bool? isLightTheme = null;
27 | partial void OnIsLightThemeChanged(bool? value)
28 | {
29 | PaletteHelper paletteHelper = new();
30 | Theme newTheme = paletteHelper.GetTheme();
31 |
32 | newTheme.SetBaseTheme(value.HasValue ? value.Value ? BaseTheme.Light : BaseTheme.Dark : BaseTheme.Inherit);
33 | paletteHelper.SetTheme(newTheme);
34 |
35 | foreach (Window currentWindow in Application.Current.Windows)
36 | BorderThemeSetter.SetBorderTheme(currentWindow, value);
37 |
38 | Settings.Default.IsLightTheme = (sbyte)(value.HasValue ? value.Value ? 1 : 0 : -1);
39 | Settings.Default.Save();
40 | }
41 |
42 | [ObservableProperty]
43 | private static Color accentForegroundColor = AboutConst.AccentBlueColor;
44 | }
--------------------------------------------------------------------------------
/Utils/IconRemover.cs:
--------------------------------------------------------------------------------
1 | using System.Runtime.InteropServices;
2 | using System.Windows;
3 | using System.Windows.Interop;
4 |
5 | namespace Sheas_Cealer.Utils;
6 |
7 | internal static partial class IconRemover
8 | {
9 | private const int GwlExStyle = -20;
10 | private const int WsExDlgModalFrame = 0x0001;
11 | private const int SwpNoSize = 0x0001;
12 | private const int SwpNoMove = 0x0002;
13 | private const int SwpNoZOrder = 0x0004;
14 | private const int SwpFrameChanged = 0x0020;
15 | private const uint WmSetIcon = 0x0080;
16 |
17 | [LibraryImport("user32.dll", EntryPoint = "GetWindowLongW")]
18 | private static partial int GetWindowLong(nint hwnd, int index);
19 | [LibraryImport("user32.dll", EntryPoint = "SetWindowLongW")]
20 | private static partial void SetWindowLong(nint hwnd, int index, nint newStyle);
21 | [LibraryImport("user32.dll")]
22 | [return: MarshalAs(UnmanagedType.Bool)]
23 | private static partial void SetWindowPos(nint hwnd, nint hwndInsertAfter, int x, int y, int width, int height, uint flags);
24 | [LibraryImport("user32.dll", EntryPoint = "SendMessageW")]
25 | private static partial void SendMessage(nint hwnd, uint msg, nint wParam, nint lParam);
26 |
27 | internal static void RemoveIcon(Window window)
28 | {
29 | nint hwnd = new WindowInteropHelper(window).Handle;
30 |
31 | SetWindowLong(hwnd, GwlExStyle, GetWindowLong(hwnd, GwlExStyle) | WsExDlgModalFrame);
32 |
33 | SetWindowPos(hwnd, nint.Zero, 0, 0, 0, 0, SwpNoMove | SwpNoSize | SwpNoZOrder | SwpFrameChanged);
34 |
35 | SendMessage(hwnd, WmSetIcon, new(1), nint.Zero);
36 | SendMessage(hwnd, WmSetIcon, nint.Zero, nint.Zero);
37 | }
38 | }
--------------------------------------------------------------------------------
/Convs/MainConv.cs:
--------------------------------------------------------------------------------
1 | namespace Sheas_Cealer.Convs;
2 |
3 | internal static class MainConv
4 | {
5 | public static MainAdminControlVisibilityConv MainAdminControlVisibilityConv => new();
6 | public static MainMihomoButtonContentConv MainMihomoButtonContentConv => new();
7 | public static MainMihomoButtonIsEnabledConv MainMihomoButtonIsEnabledConv => new();
8 | public static MainMihomoButtonToolTipConv MainMihomoButtonToolTipConv => new();
9 | public static MainNginxButtonContentConv MainNginxButtonContentConv => new();
10 | public static MainNginxButtonToolTipConv MainNginxButtonToolTipConv => new();
11 | public static MainNoClickButtonContentConv MainNoClickButtonContentConv => new();
12 | public static MainNoClickButtonToolTipConv MainNoClickButtonToolTipConv => new();
13 | public static MainNginxButtonIsEnabledConv MainNginxButtonIsEnabledConv => new();
14 | public static MainProxyColumnWidthConv MainProxyColumnWidthConv => new();
15 | public static MainSettingsBoxHintConv MainSettingsBoxHintConv => new();
16 | public static MainSettingsBoxTextConv MainSettingsBoxTextConv => new();
17 | public static MainSettingsBoxToolTipConv MainSettingsBoxToolTipConv => new();
18 | public static MainSettingsFunctionButtonContentConv MainSettingsFunctionButtonContentConv => new();
19 | public static MainSettingsModeButtonContentConv MainSettingsModeButtonContentConv => new();
20 | public static MainBrowserButtonIsEnabledConv MainBrowserButtonIsEnabledConv => new();
21 | public static MainUpdateHostButtonContentConv MainUpdateHostButtonContentConv => new();
22 | public static MainUpdateHostButtonIsEnabledConv MainUpdateHostButtonIsEnabledConv => new();
23 | public static MainWinWidthConv MainWinWidthConv => new();
24 | }
--------------------------------------------------------------------------------
/App.xaml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
18 |
19 |
20 |
21 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/Utils/ForegroundGenerator.cs:
--------------------------------------------------------------------------------
1 | using Sheas_Cealer.Consts;
2 | using System;
3 | using System.Windows.Media;
4 |
5 | namespace Sheas_Cealer.Utils;
6 |
7 | internal static class ForegroundGenerator
8 | {
9 | internal static (Color?, Color) GetForeground(int red, int green, int blue)
10 | {
11 | double redComponent = red / 255.0, greenComponent = green / 255.0, blueComponent = blue / 255.0;
12 |
13 | double luminance = 0.2126 * GammaCorrect(redComponent) + 0.7152 * GammaCorrect(greenComponent) + 0.0722 * GammaCorrect(blueComponent);
14 |
15 | double blackContrast = (luminance + 0.05) / 0.05;
16 | double whiteContrast = 1.05 / (luminance + 0.05);
17 |
18 | double hue = redComponent > greenComponent && redComponent > blueComponent ? 60 * ((greenComponent - blueComponent) / (redComponent - Math.Min(greenComponent, blueComponent)) + (greenComponent < blueComponent ? 6 : 0)) :
19 | greenComponent > blueComponent && greenComponent > redComponent ? 60 * ((blueComponent - redComponent) / (greenComponent - Math.Min(blueComponent, redComponent)) + 2) :
20 | blueComponent > redComponent && blueComponent > greenComponent ? 60 * ((redComponent - greenComponent) / (blueComponent - Math.Min(redComponent, greenComponent)) + 4) : 0;
21 |
22 | double blueContrast = Math.Min(Math.Abs(hue - 206.57), 360 - Math.Abs(hue - 206.57));
23 | double redContrast = Math.Min(Math.Abs(hue - 4.11), 360 - Math.Abs(hue - 4.11));
24 |
25 | return (blackContrast >= 5.5 && whiteContrast >= 2.5 ? null :
26 | blackContrast >= whiteContrast ? Colors.Black : Colors.White,
27 | blueContrast >= redContrast ? AboutConst.AccentBlueColor : AboutConst.AccentRedColor);
28 | }
29 |
30 | private static double GammaCorrect(double component) => component <= 0.03928 ? component / 12.92 : Math.Pow((component + 0.055) / 1.055, 2.4);
31 | }
--------------------------------------------------------------------------------
/Wins/SettingsWin.xaml:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
28 |
32 |
36 |
40 |
41 |
--------------------------------------------------------------------------------
/.filenesting.json:
--------------------------------------------------------------------------------
1 | {
2 | "root": true,
3 | "dependentFileProviders": {
4 | "add": {
5 | "fileToFile": {
6 | "add": {
7 | "AboutMultilangConst.resx": [ "AboutConst.cs" ],
8 | "AboutMultilangConst.zh.resx": [ "AboutConst.cs" ],
9 | "MainMultilangConst.resx": [ "MainConst.cs" ],
10 | "MainMultilangConst.zh.resx": [ "MainConst.cs" ],
11 | "SettingsMultilangConst.resx": [ "SettingsConst.cs" ],
12 | "SettingsMultilangConst.zh.resx": [ "SettingsConst.cs" ],
13 |
14 | "AboutAccentButtonForegroundConv.cs": [ "AboutConv.cs" ],
15 | "AboutVersionButtonContentConv.cs": [ "AboutConv.cs" ],
16 | "MainAdminControlVisibilityConv.cs": [ "MainConv.cs" ],
17 | "MainMihomoButtonContentConv.cs": [ "MainConv.cs" ],
18 | "MainMihomoButtonIsEnabledConv.cs": [ "MainConv.cs" ],
19 | "MainMihomoButtonToolTipConv.cs": [ "MainConv.cs" ],
20 | "MainNginxButtonContentConv.cs": [ "MainConv.cs" ],
21 | "MainNginxButtonIsEnabledConv.cs": [ "MainConv.cs" ],
22 | "MainNginxButtonToolTipConv.cs": [ "MainConv.cs" ],
23 | "MainNoClickButtonContentConv.cs": [ "MainConv.cs" ],
24 | "MainNoClickButtonToolTipConv.cs": [ "MainConv.cs" ],
25 | "MainProxyColumnWidthConv.cs": [ "MainConv.cs" ],
26 | "MainSettingsBoxHintConv.cs": [ "MainConv.cs" ],
27 | "MainSettingsBoxTextConv.cs": [ "MainConv.cs" ],
28 | "MainSettingsBoxToolTipConv.cs": [ "MainConv.cs" ],
29 | "MainSettingsFunctionButtonContentConv.cs": [ "MainConv.cs" ],
30 | "MainSettingsModeButtonContentConv.cs": [ "MainConv.cs" ],
31 | "MainBrowserButtonIsEnabledConv.cs": [ "MainConv.cs" ],
32 | "MainUpdateHostButtonContentConv.cs": [ "MainConv.cs" ],
33 | "MainUpdateHostButtonIsEnabledConv.cs": [ "MainConv.cs" ],
34 | "MainWinWidthConv.cs": [ "MainConv.cs" ],
35 | "SettingsLangsButtonContentConv.cs": [ "SettingsConv.cs" ],
36 | "SettingsThemesButtonContentConv.cs": [ "SettingsConv.cs" ],
37 | "SettingsWeightsButtonContentConv.cs": [ "SettingsConv.cs" ]
38 | }
39 | }
40 | }
41 | }
42 | }
--------------------------------------------------------------------------------
/Preses/SettingsPres.cs:
--------------------------------------------------------------------------------
1 | using CommunityToolkit.Mvvm.ComponentModel;
2 | using Sheas_Cealer.Props;
3 | using System.Diagnostics;
4 | using System.Globalization;
5 | using System.Threading;
6 | using System.Windows;
7 | using System.Windows.Controls;
8 | using System.Windows.Markup;
9 |
10 | namespace Sheas_Cealer.Preses;
11 |
12 | internal partial class SettingsPres : GlobalPres
13 | {
14 | internal SettingsPres()
15 | {
16 | IsEnglishLang = Settings.Default.IsEnglishLang switch
17 | {
18 | -1 => null,
19 | 0 => false,
20 | 1 => true,
21 | _ => throw new UnreachableException()
22 | };
23 |
24 | IsLightWeight = Settings.Default.IsLightWeight switch
25 | {
26 | -1 => null,
27 | 0 => false,
28 | 1 => true,
29 | _ => throw new UnreachableException()
30 | };
31 | }
32 |
33 | [ObservableProperty]
34 | private static bool? isEnglishLang = null;
35 | partial void OnIsEnglishLangChanged(bool? value)
36 | {
37 | CultureInfo newCulture = value.HasValue ? new(value.Value ? "en" : "zh") : CultureInfo.InstalledUICulture;
38 |
39 | Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = newCulture;
40 |
41 | foreach (Window currentWindow in Application.Current.Windows)
42 | currentWindow.Language = XmlLanguage.GetLanguage(newCulture.IetfLanguageTag);
43 |
44 | Settings.Default.IsEnglishLang = (sbyte)(value.HasValue ? value.Value ? 1 : 0 : -1);
45 | Settings.Default.Save();
46 | }
47 |
48 | [ObservableProperty]
49 | private static bool? isLightWeight = null;
50 | partial void OnIsLightWeightChanged(bool? value)
51 | {
52 | FontWeight newWeight = value.HasValue ? value.Value ? FontWeights.Light : FontWeights.Bold : FontWeights.Regular;
53 | Style newWindowStyle = new(typeof(Window), Application.Current.Resources["CommonWindow"] as Style);
54 |
55 | newWindowStyle.Setters.Add(new Setter(Window.FontWeightProperty, newWeight));
56 | Application.Current.Resources["CommonWindow"] = newWindowStyle;
57 |
58 | Style newButtonStyle = new(typeof(Button), Application.Current.Resources[typeof(Button)] as Style);
59 |
60 | newButtonStyle.Setters.Add(new Setter(Button.FontWeightProperty, newWeight));
61 | Application.Current.Resources[typeof(Button)] = newButtonStyle;
62 |
63 | Settings.Default.IsLightWeight = (sbyte)(value.HasValue ? value.Value ? 1 : 0 : -1);
64 | Settings.Default.Save();
65 | }
66 | }
--------------------------------------------------------------------------------
/Wins/AboutWin.xaml.cs:
--------------------------------------------------------------------------------
1 | using Ona_Core;
2 | using Sheas_Cealer.Consts;
3 | using Sheas_Cealer.Preses;
4 | using Sheas_Cealer.Utils;
5 | using System;
6 | using System.Diagnostics;
7 | using System.Net.Http;
8 | using System.Text.Json;
9 | using System.Threading.Tasks;
10 | using System.Windows;
11 | using System.Windows.Controls;
12 | using System.Windows.Input;
13 |
14 | namespace Sheas_Cealer.Wins;
15 |
16 | public partial class AboutWin : Window
17 | {
18 | private readonly AboutPres AboutPres;
19 | private readonly HttpClient AboutClient = new(new HttpClientHandler { ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator });
20 |
21 | internal AboutWin()
22 | {
23 | InitializeComponent();
24 |
25 | DataContext = AboutPres = new();
26 | }
27 | private void AboutWin_SourceInitialized(object sender, EventArgs e)
28 | {
29 | IconRemover.RemoveIcon(this);
30 | BorderThemeSetter.SetBorderTheme(this, AboutPres.IsLightTheme);
31 | }
32 | private async void AboutWin_Loaded(object sender, RoutedEventArgs e)
33 | {
34 | await Task.Run(async () =>
35 | {
36 | try
37 | {
38 | AboutClient.DefaultRequestHeaders.Add("User-Agent", AboutConst.ReleaseApiUserAgent);
39 |
40 | JsonElement releaseInfoObject = JsonDocument.Parse(await Http.GetAsync(AboutConst.ReleaseApiUrl, AboutClient)).RootElement;
41 |
42 | AboutClient.DefaultRequestHeaders.Clear();
43 |
44 | foreach (JsonProperty releaseInfoContent in releaseInfoObject.EnumerateObject())
45 | if (releaseInfoContent.Name == "name" && releaseInfoContent.Value.ToString() != AboutConst.VersionButtonVersionContent)
46 | AboutPres.IsSheasCealerUtd = false;
47 | }
48 | catch { }
49 | });
50 | }
51 |
52 | private void AboutButton_Click(object sender, RoutedEventArgs e)
53 | {
54 | Button senderButton = (Button)sender;
55 |
56 | ProcessStartInfo processStartInfo = new(senderButton == EmailButton ? "mailto:" : string.Empty + senderButton.ToolTip) { UseShellExecute = true };
57 |
58 | try { Process.Start(processStartInfo); }
59 | catch (UnauthorizedAccessException)
60 | {
61 | processStartInfo.Verb = "RunAs";
62 | Process.Start(processStartInfo);
63 | }
64 | }
65 |
66 | private void AboutWin_KeyDown(object sender, KeyEventArgs e)
67 | {
68 | if (e.Key == Key.Escape)
69 | Close();
70 | }
71 | }
--------------------------------------------------------------------------------
/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using MaterialDesignThemes.Wpf;
2 | using Sheas_Cealer.Preses;
3 | using Sheas_Cealer.Props;
4 | using Sheas_Cealer.Utils;
5 | using Sheas_Cealer.Wins;
6 | using System;
7 | using System.Windows;
8 | using System.Windows.Controls;
9 | using System.Windows.Media;
10 | using System.Windows.Threading;
11 |
12 | namespace Sheas_Cealer;
13 |
14 | public partial class App : Application
15 | {
16 | private void App_OnStartup(object sender, StartupEventArgs e)
17 | {
18 | #region Upgrade Settings
19 | if (Settings.Default.IsUpgradeRequired)
20 | {
21 | Settings.Default.Upgrade();
22 | Settings.Default.IsUpgradeRequired = false;
23 | Settings.Default.Save();
24 | }
25 | #endregion Upgrade Settings
26 |
27 | #region Primary Color
28 | PaletteHelper paletteHelper = new();
29 | Theme newTheme = paletteHelper.GetTheme();
30 | Color newPrimaryColor = Color.FromRgb(Settings.Default.PrimaryColor.R, Settings.Default.PrimaryColor.G, Settings.Default.PrimaryColor.B);
31 |
32 | newTheme.SetPrimaryColor(newPrimaryColor);
33 | paletteHelper.SetTheme(newTheme);
34 | #endregion Primary Color
35 |
36 | #region Background Color
37 | if (Environment.OSVersion.Version.Build < 22000)
38 | {
39 | Style newWindowStyle = new(typeof(Window), Current.Resources["CommonWindow"] as Style);
40 |
41 | newWindowStyle.Setters.Add(new Setter(Window.BackgroundProperty, new DynamicResourceExtension("MaterialDesignBackground")));
42 | Current.Resources["CommonWindow"] = newWindowStyle;
43 | }
44 | #endregion Background Color
45 |
46 | #region Foreground Color
47 | Style newButtonStyle = new(typeof(Button), Current.Resources[typeof(Button)] as Style);
48 | (Color? newForegroundColor, Color newAccentForegroundColor) = ForegroundGenerator.GetForeground(newPrimaryColor.R, newPrimaryColor.G, newPrimaryColor.B);
49 |
50 | newButtonStyle.Setters.Add(new Setter(Button.ForegroundProperty, newForegroundColor.HasValue ? new SolidColorBrush(newForegroundColor.Value) : new DynamicResourceExtension("MaterialDesignBackground")));
51 | Current.Resources[typeof(Button)] = newButtonStyle;
52 |
53 | new SettingsPres().AccentForegroundColor = newAccentForegroundColor;
54 | #endregion Foreground Color
55 |
56 | new MainWin().Show();
57 | }
58 |
59 | private void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
60 | {
61 | MessageBox.Show($"Error: {e.Exception.Message}");
62 | e.Handled = true;
63 | }
64 | }
--------------------------------------------------------------------------------
/Sheas-Cealer.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 17
4 | VisualStudioVersion = 17.1.32328.378
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sheas-Cealer", "Sheas-Cealer.csproj", "{662F787A-474F-41FD-B813-645CAA89E531}"
7 | ProjectSection(ProjectDependencies) = postProject
8 | {42491572-0050-4CDA-9189-DFC98BDBBF73} = {42491572-0050-4CDA-9189-DFC98BDBBF73}
9 | {76263DF7-E4E4-4846-8604-8CFCA7125E2F} = {76263DF7-E4E4-4846-8604-8CFCA7125E2F}
10 | EndProjectSection
11 | EndProject
12 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sheas-Core", "..\Sheas-Core\Sheas-Core.csproj", "{42491572-0050-4CDA-9189-DFC98BDBBF73}"
13 | EndProject
14 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ona-Core", "..\Ona-Core\Ona-Core.csproj", "{76263DF7-E4E4-4846-8604-8CFCA7125E2F}"
15 | EndProject
16 | Global
17 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
18 | Debug|Any CPU = Debug|Any CPU
19 | Release|Any CPU = Release|Any CPU
20 | EndGlobalSection
21 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
22 | {662F787A-474F-41FD-B813-645CAA89E531}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
23 | {662F787A-474F-41FD-B813-645CAA89E531}.Debug|Any CPU.Build.0 = Debug|Any CPU
24 | {662F787A-474F-41FD-B813-645CAA89E531}.Release|Any CPU.ActiveCfg = Release|Any CPU
25 | {662F787A-474F-41FD-B813-645CAA89E531}.Release|Any CPU.Build.0 = Release|Any CPU
26 | {42491572-0050-4CDA-9189-DFC98BDBBF73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
27 | {42491572-0050-4CDA-9189-DFC98BDBBF73}.Debug|Any CPU.Build.0 = Debug|Any CPU
28 | {42491572-0050-4CDA-9189-DFC98BDBBF73}.Release|Any CPU.ActiveCfg = Release|Any CPU
29 | {42491572-0050-4CDA-9189-DFC98BDBBF73}.Release|Any CPU.Build.0 = Release|Any CPU
30 | {76263DF7-E4E4-4846-8604-8CFCA7125E2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
31 | {76263DF7-E4E4-4846-8604-8CFCA7125E2F}.Debug|Any CPU.Build.0 = Debug|Any CPU
32 | {76263DF7-E4E4-4846-8604-8CFCA7125E2F}.Release|Any CPU.ActiveCfg = Release|Any CPU
33 | {76263DF7-E4E4-4846-8604-8CFCA7125E2F}.Release|Any CPU.Build.0 = Release|Any CPU
34 | EndGlobalSection
35 | GlobalSection(SolutionProperties) = preSolution
36 | HideSolutionNode = FALSE
37 | EndGlobalSection
38 | GlobalSection(ExtensibilityGlobals) = postSolution
39 | RESX_Rules = {"EnabledRules":["StringFormat","WhiteSpaceLead","WhiteSpaceTail","PunctuationLead"]}
40 | RESX_SortFileContentOnSave = True
41 | SolutionGuid = {33005A8D-2D3D-4101-AFF0-F68B29FE9B28}
42 | RESX_NeutralResourcesLanguage = en-US
43 | RESX_ConfirmAddLanguageFile = True
44 | RESX_AutoCreateNewLanguageFiles = True
45 | RESX_DuplicateKeyHandling = Fail
46 | EndGlobalSection
47 | EndGlobal
48 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/Wins/SettingsWin.xaml.cs:
--------------------------------------------------------------------------------
1 | using MaterialDesignThemes.Wpf;
2 | using Sheas_Cealer.Consts;
3 | using Sheas_Cealer.Preses;
4 | using Sheas_Cealer.Props;
5 | using Sheas_Cealer.Utils;
6 | using System;
7 | using System.Windows;
8 | using System.Windows.Controls;
9 | using System.Windows.Input;
10 | using System.Windows.Media;
11 |
12 | namespace Sheas_Cealer.Wins;
13 |
14 | public partial class SettingsWin : Window
15 | {
16 | private readonly SettingsPres SettingsPres;
17 |
18 | internal SettingsWin()
19 | {
20 | InitializeComponent();
21 |
22 | DataContext = SettingsPres = new();
23 | }
24 | private void SettingsWin_SourceInitialized(object sender, EventArgs e)
25 | {
26 | IconRemover.RemoveIcon(this);
27 | BorderThemeSetter.SetBorderTheme(this, SettingsPres.IsLightTheme);
28 | }
29 |
30 | private void ThemesButton_Click(object sender, RoutedEventArgs e) => SettingsPres.IsLightTheme = SettingsPres.IsLightTheme.HasValue ? SettingsPres.IsLightTheme.Value ? null : true : false;
31 | private void LangsButton_Click(object sender, RoutedEventArgs e)
32 | {
33 | SettingsPres.IsEnglishLang = SettingsPres.IsEnglishLang.HasValue ? SettingsPres.IsEnglishLang.Value ? null : true : false;
34 |
35 | MessageBox.Show(SettingsConst._ChangeLangSuccessMsg);
36 | }
37 | private void ColorsButton_Click(object sender, RoutedEventArgs e)
38 | {
39 | Random random = new();
40 | PaletteHelper paletteHelper = new();
41 | Theme newTheme = paletteHelper.GetTheme();
42 | Color newPrimaryColor = Color.FromRgb((byte)random.Next(256), (byte)random.Next(256), (byte)random.Next(256));
43 |
44 | newTheme.SetPrimaryColor(newPrimaryColor);
45 | paletteHelper.SetTheme(newTheme);
46 |
47 | Style newButtonStyle = new(typeof(Button), Application.Current.Resources[typeof(Button)] as Style);
48 | (Color? newForegroundColor, Color newAccentForegroundColor) = ForegroundGenerator.GetForeground(newPrimaryColor.R, newPrimaryColor.G, newPrimaryColor.B);
49 |
50 | newButtonStyle.Setters.Add(new Setter(ForegroundProperty, newForegroundColor.HasValue ? new SolidColorBrush(newForegroundColor.Value) : new DynamicResourceExtension("MaterialDesignBackground")));
51 | Application.Current.Resources[typeof(Button)] = newButtonStyle;
52 |
53 | SettingsPres.AccentForegroundColor = newAccentForegroundColor;
54 |
55 | Settings.Default.PrimaryColor = System.Drawing.Color.FromArgb(newPrimaryColor.A, newPrimaryColor.R, newPrimaryColor.G, newPrimaryColor.B);
56 | Settings.Default.Save();
57 | }
58 | private void WeightsButton_Click(object sender, RoutedEventArgs e) => SettingsPres.IsLightWeight = SettingsPres.IsLightWeight.HasValue ? SettingsPres.IsLightWeight.Value ? null : true : false;
59 |
60 | private void SettingsWin_KeyDown(object sender, KeyEventArgs e)
61 | {
62 | if (e.Key == Key.Escape)
63 | Close();
64 | }
65 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Sheas ◁ Cealer
2 | - Just Ceal It -
3 |
4 |
5 | ## 其他语言
6 | [English README](README_EN.md)
7 |
8 | ## 自我介绍
9 | **Sheas Cealer**: 一只基于 **WPF(.Net8)** 的桌面端 SNI 伪造工具
10 |
11 | * 适用平台: Windows (Win10 之前的系统版本请使用 [1.1.0](https://github.com/SpaceTimee/Sheas-Cealer/releases/tag/1.1.0)) (其他平台请参考[相关项目](https://github.com/SpaceTimee/Sheas-Cealer#相关项目))
12 |
13 | ## 词汇解释
14 | **[Sheas Cealer Dictionary](https://github.com/SpaceTimee/Sheas-Cealer/wiki/Sheas-Cealer-Dictionary)**
15 |
16 | ## 注意事项
17 | 1. 内置伪造规则在 [Cealing Host 存储库](https://github.com/SpaceTimee/Cealing-Host) 持续更新
18 | 2. Sheas Cealer 更新时不会覆盖已有的伪造规则,如需与上游同步,需点击**更新上游规则**按钮,或**手动修改覆盖**
19 | 3. 本项目及所有相关资源仅供**抵御网络非法监听**和**开展网络安全研究**使用,无意绕过任何国家审查设备的审查
20 | 4. 为避免不必要的麻烦,使用前请先阅读[**用户协议**](https://github.com/SpaceTimee/Sheas-Cealer#用户协议)
21 | 5. Sheas Cealer 仍处于**开发阶段**,但每个正式版发布前会尽量确保其**稳定可用**
22 |
23 | ## 用户协议
24 | 1. [隐私政策](https://thoughts.teambition.com/share/6264eda98adeb10041b92fda#title=Sheas_Cealer_隐私政策)
25 | 2. [使用协议](https://thoughts.teambition.com/share/6264edd78adeb10041b92fdb#title=Sheas_Cealer_使用协议)
26 |
27 | ## 下载地址
28 | 1. Github: [https://github.com/SpaceTimee/Sheas-Cealer/releases](https://github.com/SpaceTimee/Sheas-Cealer/releases)
29 | 2. 群文件 (参与内测): 参考[联系方式](https://github.com/SpaceTimee/Sheas-Cealer#联系方式)
30 |
31 | > 出于不可抗力因素,Sheas Cealer 暂时无法再提供蓝奏云下载地址,在此依旧感谢蓝奏云一直以来的免费分发服务
32 |
33 | ## 安装方式
34 | 1. Setup 安装器 (首选): 下载 Sheas Cealer Setup.exe 并运行 -> 按照提示设置即可安装
35 | 2. Zip 压缩包 (免安装): 下载 Sheas Cealer Zip.zip 并解压 -> 完成后即可直接使用
36 |
37 | > Scd 版本: Scd 版本内置 .Net 运行时,可在缺乏 .Net 运行时的环境下运行,但代价是更大的文件体积以及更差的跨平台能力,如果没有特殊原因,不建议使用 Scd 版本
38 |
39 | ## 食用文档
40 | **[Sheas Cealer Documentation](https://github.com/SpaceTimee/Sheas-Cealer/wiki/Sheas-Cealer-Documentation)**
41 |
42 | ## 项目构建
43 | [Sheas Cealer Build](https://github.com/SpaceTimee/Sheas-Cealer/wiki/Sheas-Cealer-Build)
44 |
45 | ## 项目原理
46 | 利用 Chromium 内核的启动参数特性伪造 SNI 拓展标记,详细原理可参考[这篇文章](https://nicebowl.fun/24_8)
47 |
48 | ## 致谢名单
49 | * **kit: 为本项目提供全部的原理基础**
50 | * **NiceBowl: 为本项目提供详细的原理说明**
51 |
52 | ## 开发者
53 | **Space Time**
54 |
55 | ## 联系方式
56 | 1. **QQ 群: 1034315671,716266896,338919498**
57 | 2. **TG 群: [PixCealerChat](https://t.me/PixCealerChat)**
58 | 3. 邮箱: Zeus6_6@163.com
59 |
60 | ## 相关项目
61 | 1. [Sheas Cealer Droid](https://github.com/SpaceTimee/Sheas-Cealer-Droid): Sheas Cealer 安卓端
62 | 2. [Sheas Cealer Nix](https://github.com/SpaceTimee/Sheas-Cealer/tree/nix): Sheas Cealer 跨平台桌面端
63 | 3. [Cealing Host](https://github.com/SpaceTimee/Cealing-Host): 最新的 Sheas Cealer 内置伪造规则
64 | 4. [Sheas Dop](https://github.com/SpaceTimee/Sheas-Dop): DNS 抗污染解析工具 (Sheas Cealer 全局净化子项目)
65 | 5. [Sheas Nginx](https://github.com/SpaceTimee/Sheas-Nginx): Pixiv Nginx 启动器 (Sheas Cealer 全局伪造 × Pixiv Nginx 合作子项目)
66 | 6. [Bot CealingCat](https://github.com/SpaceTimee/Bot-CealingCat): 提供 Sheas Cealer 相关服务的 Telegram Bot
67 | 7. [Console HostChecker](https://github.com/SpaceTimee/Console-HostChecker): Cealing Host 自动化检查脚本
68 | 8. [Console HostGenerator](https://github.com/SpaceTimee/Console-HostGenerator): Cealing Host 自动化生成脚本
69 |
70 | ## 许可证
71 | [](https://app.fossa.com/projects/git%2Bgithub.com%2FSpaceTimee%2FSheas-Cealer?ref=badge_large)
72 |
73 | •ᴗ•
74 |
--------------------------------------------------------------------------------
/Consts/MainConst.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Win32;
2 | using System;
3 | using System.IO;
4 | using System.Security.Principal;
5 | using System.Text.RegularExpressions;
6 |
7 | namespace Sheas_Cealer.Consts;
8 |
9 | internal abstract partial class MainConst : MainMultilangConst
10 | {
11 | internal enum SettingsMode
12 | { BrowserPathMode, UpstreamUrlMode, ExtraArgsMode }
13 |
14 | public static bool IsAdmin => new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator);
15 |
16 | internal static string EdgeBrowserRegistryPath => @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\msedge.exe";
17 | internal static string ChromeBrowserRegistryPath => @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe";
18 | internal static string BraveBrowserRegistryPath => @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\brave.exe";
19 |
20 | internal static string DefaultUpstreamUrl => "https://gitlab.com/SpaceTimee/Cealing-Host/raw/main/Cealing-Host.json";
21 | internal static string CealHostPath => Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "Cealing-Host-*.json");
22 | internal static string LocalHostPath => Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "Cealing-Host-L.json");
23 | internal static string UpstreamHostPath => Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "Cealing-Host-U.json");
24 |
25 | internal static string HostsConfPath => Path.Combine(Registry.LocalMachine.OpenSubKey(@"\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DataBasePath")?.GetValue("DataBasePath", null)?.ToString() ?? @"C:\Windows\System32\drivers\etc", "hosts");
26 | internal static string HostsConfStartMarker => $"# Cealing Nginx Start{Environment.NewLine}";
27 | internal static string HostsConfEndMarker => "# Cealing Nginx End";
28 |
29 | internal static string ConginxPath => Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "Cealing-Conginx.exe");
30 | internal static string NginxPath => Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "Cealing-Nginx.exe");
31 | internal static string NginxConfPath => Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "nginx.conf");
32 | internal static string NginxLogsPath => Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "logs");
33 | internal static string NginxErrorLogsPath => Path.Combine(NginxLogsPath, "error.log");
34 | internal static string NginxTempPath => Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "temp");
35 | internal static string NginxCertPath => Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "Cealing-Cert.pem");
36 | internal static string NginxKeyPath => Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "Cealing-Key.pem");
37 | internal static string NginxRootCertSubjectName => "CN=Cealing Cert Root";
38 | internal static string NginxChildCertSubjectName => "CN=Cealing Cert Child";
39 |
40 | internal static string ComihomoPath => Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "Cealing-Comihomo.exe");
41 | internal static string MihomoPath => Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "Cealing-Mihomo.exe");
42 | internal static string MihomoConfPath => Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "config.yaml");
43 | internal static string[] MihomoNameServers => ["https://ns.net.kg/dns-query", "https://dnschina1.soraharu.com/dns-query", "https://0ms.dev/dns-query"];
44 |
45 | internal static string NotifyIconText => "Sheas Cealer";
46 |
47 | [GeneratedRegex("^Cealing-Host-")]
48 | internal static partial Regex CealHostPrefixRegex();
49 |
50 | [GeneratedRegex(@"^(https?:\/\/)?[a-zA-Z0-9](-*[a-zA-Z0-9])*(\.[a-zA-Z0-9](-*[a-zA-Z0-9])*)*(:\d{1,5})?(\/[a-zA-Z0-9.\-_\~\!\$\&\'\(\)\*\+\,\;\=\:\@\%]*)*$")]
51 | internal static partial Regex UpstreamUrlRegex();
52 |
53 | [GeneratedRegex(@"^(--[a-z](-?[a-z])*(=("".*"")|.*)?( --[a-z](-?[a-z])*(="".*"")?)*)?$")]
54 | internal static partial Regex ExtraArgsRegex();
55 | }
--------------------------------------------------------------------------------
/Wins/AboutWin.xaml:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
32 |
45 |
50 |
51 |
55 |
59 |
60 |
64 |
68 |
69 |
--------------------------------------------------------------------------------
/README_EN.md:
--------------------------------------------------------------------------------
1 | Sheas ◁ Cealer
2 | - Just Ceal It -
3 |
4 |
5 | ## Language
6 | [中文 README](README.md)
7 |
8 | ## About
9 | **Sheas Cealer**: A desktop SNI concealing tool based on **WPF(.Net8)**
10 |
11 | * Applicable platform: Windows (For system versions before Win10, please use [1.1.0](https://github.com/SpaceTimee/Sheas-Cealer/releases/tag/1.1.0)) (For more platforms, please refer to [Projects](https://github.com/SpaceTimee/Sheas-Cealer#Projects))
12 |
13 | ## Vocabulary
14 | **[Sheas Cealer Dictionary](https://github.com/SpaceTimee/Sheas-Cealer/wiki/Sheas-Cealer-Dictionary)**
15 |
16 | ## Notes
17 | 1. The Built-in Cealing Host is continuously updated in the [Cealing Host repository](https://github.com/SpaceTimee/Cealing-Host)
18 | 2. When Sheas Cealer is updated, it will not overwrite the existing configs. If you need to synchronize with the upstream, you need to click the **Update Upstream Host** button, or **manually overwrite**
19 | 3. This project and all its resources are for the sole purpose of **defending against illegal network monitoring** and **conducting network security research**, and are not intended to bypass the censorship of any country
20 | 4. Please read the [**Agreements**](https://github.com/SpaceTimee/Sheas-Cealer#Agreements) before use
21 | 5. Sheas Cealer is still in the **development stage**, but each production version will be **stable and available** before release
22 |
23 | ## Agreements
24 | 1. [Privacy Policy](https://thoughts.teambition.com/share/6264eda98adeb10041b92fda#title=Sheas_Cealer_隐私政策)
25 | 2. [EULA](https://thoughts.teambition.com/share/6264edd78adeb10041b92fdb#title=Sheas_Cealer_使用协议)
26 |
27 | ## Download
28 | 1. Github (preferred): [https://github.com/SpaceTimee/Sheas-Cealer/releases](https://github.com/SpaceTimee/Sheas-Cealer/releases)
29 | 2. Group File (participate in internal testing): Please refer to [Contacts](https://github.com/SpaceTimee/Sheas-Cealer#Contacts)
30 |
31 | > Due to force majeure, Sheas Cealer is temporarily unable to provide the download address of Lanzou Cloud. We would like to thank Lanzou Cloud for its free distribution service
32 |
33 | ## Installation
34 | 1. Setup Installer (preferred): Download Sheas Cealer Setup.exe and run -> Then follow the prompts to install
35 | 2. Zip Package (installation-free): Download Sheas Cealer Zip.zip and unzip -> Then you can use it directly
36 |
37 | > Scd version: The Scd version has a built-in .Net runtime and can run in an environment without a .Net runtime, but the cost is a larger file size and worse cross-platform capabilities. If there is no special reason, it is not recommended to use the Scd version
38 |
39 | ## Documentation
40 | **[Sheas Cealer Documentation](https://github.com/SpaceTimee/Sheas-Cealer/wiki/Sheas-Cealer-Documentation)**
41 |
42 | ## Build
43 | [Sheas Cealer Build](https://github.com/SpaceTimee/Sheas-Cealer/wiki/Sheas-Cealer-Build)
44 |
45 | ## Principles
46 | Using the startup parameter feature of the Chromium kernel to conceal SNI. For more detailes, please refer to [this article](https://nicebowl.fun/24_8)
47 |
48 | ## Credits
49 | * **kit: Provides all the principle foundations for this project**
50 | * **NiceBowl: Provides detailed principle explanations for this project**
51 |
52 | ## Developer
53 | **Space Time**
54 |
55 | ## Contacts
56 | 1. **QQ Group: 1034315671, 716266896, 338919498**
57 | 2. **TG Group: [PixCealerChat](https://t.me/PixCealerChat)**
58 | 3. Email: Zeus6_6@163.com
59 |
60 | ## Projects
61 | 1. [Sheas Cealer Droid](https://github.com/SpaceTimee/Sheas-Cealer-Droid): Sheas Cealer for Android
62 | 2. [Sheas Cealer Nix](https://github.com/SpaceTimee/Sheas-Cealer/tree/nix): Sheas Cealer cross-platform for desktop
63 | 3. [Cealing Host](https://github.com/SpaceTimee/Cealing-Host): The latest Built-in Cealing Host
64 | 4. [Sheas Dop](https://github.com/SpaceTimee/Sheas-Dop): DNS anti-pollution resolution tool (Sheas Cealer Global Cealing subproject)
65 | 5. [Sheas Nginx](https://github.com/SpaceTimee/Sheas-Nginx): Pixiv Nginx launcher (Sheas Cealer Global Purging × Pixiv Nginx cooperative subproject)
66 | 6. [Bot CealingCat](https://github.com/SpaceTimee/Bot-CealingCat): Telegram Bot providing Sheas Cealer related services
67 | 7. [Console HostChecker](https://github.com/SpaceTimee/Console-HostChecker): Cealing Host automated checking script
68 | 8. [Console HostGenerator](https://github.com/SpaceTimee/Console-HostGenerator): Cealing Host automated generation script
69 |
70 | ## License
71 | [](https://app.fossa.com/projects/git%2Bgithub.com%2FSpaceTimee%2FSheas-Cealer?ref=badge_large)
72 |
73 | •ᴗ•
74 |
--------------------------------------------------------------------------------
/Preses/MainPres.cs:
--------------------------------------------------------------------------------
1 | using CommunityToolkit.Mvvm.ComponentModel;
2 | using Microsoft.Win32;
3 | using Sheas_Cealer.Consts;
4 | using Sheas_Cealer.Props;
5 | using System;
6 | using System.Diagnostics;
7 | using System.IO;
8 | using File = System.IO.File;
9 |
10 | namespace Sheas_Cealer.Preses;
11 |
12 | internal partial class MainPres : GlobalPres
13 | {
14 | internal MainPres()
15 | {
16 | string[] args = Environment.GetCommandLineArgs();
17 |
18 | int browserPathIndex = Array.FindIndex(args, arg => arg.Equals("-b", StringComparison.OrdinalIgnoreCase)) + 1;
19 | int upstreamUrlIndex = Array.FindIndex(args, arg => arg.Equals("-u", StringComparison.OrdinalIgnoreCase)) + 1;
20 | int extraArgsIndex = Array.FindIndex(args, arg => arg.Equals("-e", StringComparison.OrdinalIgnoreCase)) + 1;
21 |
22 | BrowserPath = browserPathIndex != 0 && browserPathIndex != args.Length ? args[browserPathIndex] :
23 | !string.IsNullOrWhiteSpace(Settings.Default.BrowserPath) ? Settings.Default.BrowserPath :
24 | (Registry.LocalMachine.OpenSubKey(MainConst.EdgeBrowserRegistryPath)?.GetValue(string.Empty, null) ??
25 | Registry.LocalMachine.OpenSubKey(MainConst.ChromeBrowserRegistryPath)?.GetValue(string.Empty, null) ??
26 | Registry.LocalMachine.OpenSubKey(MainConst.BraveBrowserRegistryPath)?.GetValue(string.Empty, null) ??
27 | string.Empty).ToString()!;
28 |
29 | UpstreamUrl = upstreamUrlIndex == 0 || upstreamUrlIndex == args.Length ?
30 | !string.IsNullOrWhiteSpace(Settings.Default.UpstreamUrl) ? Settings.Default.UpstreamUrl : MainConst.DefaultUpstreamUrl :
31 | args[upstreamUrlIndex];
32 |
33 | ExtraArgs = extraArgsIndex == 0 || extraArgsIndex == args.Length ?
34 | !string.IsNullOrWhiteSpace(Settings.Default.ExtraArgs) ? Settings.Default.ExtraArgs : string.Empty :
35 | args[extraArgsIndex];
36 | }
37 |
38 | [ObservableProperty]
39 | private MainConst.SettingsMode settingsMode;
40 |
41 | [ObservableProperty]
42 | private string browserPath;
43 | partial void OnBrowserPathChanged(string value)
44 | {
45 | if (!File.Exists(value) || !Path.GetFileName(value).ToLowerInvariant().EndsWith(".exe"))
46 | return;
47 |
48 | Settings.Default.BrowserPath = value;
49 | Settings.Default.Save();
50 | }
51 |
52 | [ObservableProperty]
53 | private string upstreamUrl;
54 | partial void OnUpstreamUrlChanged(string value)
55 | {
56 | if (!MainConst.UpstreamUrlRegex().IsMatch(value))
57 | return;
58 |
59 | Settings.Default.UpstreamUrl = value;
60 | Settings.Default.Save();
61 | }
62 |
63 | [ObservableProperty]
64 | private string extraArgs;
65 | partial void OnExtraArgsChanged(string value)
66 | {
67 | if (!MainConst.ExtraArgsRegex().IsMatch(value))
68 | return;
69 |
70 | Settings.Default.ExtraArgs = value;
71 | Settings.Default.Save();
72 | }
73 |
74 | [ObservableProperty]
75 | private bool isUpstreamHostUtd = true;
76 |
77 | [ObservableProperty]
78 | private bool isCoproxyIniting = false;
79 |
80 | [ObservableProperty]
81 | private bool isCoproxyStopping = false;
82 |
83 | [ObservableProperty]
84 | private bool isConginxExist = File.Exists(MainConst.ConginxPath);
85 |
86 | [ObservableProperty]
87 | private bool isNginxExist = File.Exists(MainConst.NginxPath);
88 |
89 | [ObservableProperty]
90 | private bool isNginxIniting = false;
91 |
92 | [ObservableProperty]
93 | private bool isConginxRunning = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(MainConst.ConginxPath)).Length != 0;
94 |
95 | [ObservableProperty]
96 | private bool isNginxRunning = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(MainConst.NginxPath)).Length != 0;
97 |
98 | [ObservableProperty]
99 | private bool isComihomoExist = File.Exists(MainConst.ComihomoPath);
100 |
101 | [ObservableProperty]
102 | private bool isMihomoExist = File.Exists(MainConst.MihomoPath);
103 |
104 | [ObservableProperty]
105 | private bool isComihomoIniting = false;
106 |
107 | [ObservableProperty]
108 | private bool isMihomoIniting = false;
109 |
110 | [ObservableProperty]
111 | private bool isComihomoRunning = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(MainConst.ComihomoPath)).Length != 0;
112 |
113 | [ObservableProperty]
114 | private bool isMihomoRunning = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(MainConst.MihomoPath)).Length != 0;
115 |
116 | [ObservableProperty]
117 | private bool isFlashing = false;
118 | }
--------------------------------------------------------------------------------
/Sheas-Cealer.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Sheas Cealer
5 | Sheas Cealer
6 | Sheas Cealer
7 | Just Ceal It
8 | Just Ceal It
9 | Space Time
10 | Space Time
11 | 1.1.5
12 | 1.1.5
13 | 1.1.5
14 | 1.1.5
15 | Tool;Sheas;Cealer;Sni
16 | Sheas-Cealer-Logo.ico
17 | Sheas Cealer Logo.png
18 | README.md
19 | https://github.com/SpaceTimee/Sheas-Cealer
20 | https://github.com/SpaceTimee/Sheas-Cealer
21 | git
22 | Copyright © 2077
23 | WinExe
24 | net8.0-windows10.0.26100.0
25 | 10.0.17763.0
26 | 10.0.26100.41
27 | Sheas_Cealer
28 | enable
29 | true
30 | True
31 | True
32 | True
33 | True
34 | none
35 | true
36 | Props
37 | en
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 | ..\Ona-Core\bin\Release\net8.0\Ona-Core.dll
66 |
67 |
68 | ..\Sheas-Core\bin\Release\net8.0\Sheas-Core.dll
69 |
70 |
71 |
72 |
73 |
74 | True
75 | True
76 | MainMultilangConst.resx
77 |
78 |
79 | True
80 | True
81 | SettingsMultilangConst.resx
82 |
83 |
84 | True
85 | True
86 | AboutMultilangConst.resx
87 |
88 |
89 | True
90 | True
91 | Settings.settings
92 |
93 |
94 |
95 |
96 |
97 | PublicResXFileCodeGenerator
98 | MainMultilangConst.Designer.cs
99 |
100 |
101 | PublicResXFileCodeGenerator
102 | SettingsMultilangConst.Designer.cs
103 |
104 |
105 | PublicResXFileCodeGenerator
106 | AboutMultilangConst.Designer.cs
107 |
108 |
109 | SettingsSingleFileGenerator
110 | Settings.Designer.cs
111 |
112 |
113 |
114 |
115 |
--------------------------------------------------------------------------------
/Props/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 此代码由工具生成。
4 | // 运行时版本:4.0.30319.42000
5 | //
6 | // 对此文件的更改可能会导致不正确的行为,并且如果
7 | // 重新生成代码,这些更改将会丢失。
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace Sheas_Cealer.Props {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.13.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 |
26 | [global::System.Configuration.UserScopedSettingAttribute()]
27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
28 | [global::System.Configuration.DefaultSettingValueAttribute("")]
29 | public string BrowserPath {
30 | get {
31 | return ((string)(this["BrowserPath"]));
32 | }
33 | set {
34 | this["BrowserPath"] = value;
35 | }
36 | }
37 |
38 | [global::System.Configuration.UserScopedSettingAttribute()]
39 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
40 | [global::System.Configuration.DefaultSettingValueAttribute("")]
41 | public string UpstreamUrl {
42 | get {
43 | return ((string)(this["UpstreamUrl"]));
44 | }
45 | set {
46 | this["UpstreamUrl"] = value;
47 | }
48 | }
49 |
50 | [global::System.Configuration.UserScopedSettingAttribute()]
51 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
52 | [global::System.Configuration.DefaultSettingValueAttribute("")]
53 | public string ExtraArgs {
54 | get {
55 | return ((string)(this["ExtraArgs"]));
56 | }
57 | set {
58 | this["ExtraArgs"] = value;
59 | }
60 | }
61 |
62 | [global::System.Configuration.UserScopedSettingAttribute()]
63 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
64 | [global::System.Configuration.DefaultSettingValueAttribute("244, 67, 54")]
65 | public global::System.Drawing.Color PrimaryColor {
66 | get {
67 | return ((global::System.Drawing.Color)(this["PrimaryColor"]));
68 | }
69 | set {
70 | this["PrimaryColor"] = value;
71 | }
72 | }
73 |
74 | [global::System.Configuration.UserScopedSettingAttribute()]
75 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
76 | [global::System.Configuration.DefaultSettingValueAttribute("-1")]
77 | public sbyte IsLightTheme {
78 | get {
79 | return ((sbyte)(this["IsLightTheme"]));
80 | }
81 | set {
82 | this["IsLightTheme"] = value;
83 | }
84 | }
85 |
86 | [global::System.Configuration.UserScopedSettingAttribute()]
87 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
88 | [global::System.Configuration.DefaultSettingValueAttribute("-1")]
89 | public sbyte IsEnglishLang {
90 | get {
91 | return ((sbyte)(this["IsEnglishLang"]));
92 | }
93 | set {
94 | this["IsEnglishLang"] = value;
95 | }
96 | }
97 |
98 | [global::System.Configuration.UserScopedSettingAttribute()]
99 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
100 | [global::System.Configuration.DefaultSettingValueAttribute("-1")]
101 | public sbyte IsLightWeight {
102 | get {
103 | return ((sbyte)(this["IsLightWeight"]));
104 | }
105 | set {
106 | this["IsLightWeight"] = value;
107 | }
108 | }
109 |
110 | [global::System.Configuration.UserScopedSettingAttribute()]
111 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
112 | [global::System.Configuration.DefaultSettingValueAttribute("True")]
113 | public bool IsUpgradeRequired {
114 | get {
115 | return ((bool)(this["IsUpgradeRequired"]));
116 | }
117 | set {
118 | this["IsUpgradeRequired"] = value;
119 | }
120 | }
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/Consts/AboutMultilangConst.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 此代码由工具生成。
4 | // 运行时版本:4.0.30319.42000
5 | //
6 | // 对此文件的更改可能会导致不正确的行为,并且如果
7 | // 重新生成代码,这些更改将会丢失。
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace Sheas_Cealer.Consts {
12 | using System;
13 |
14 |
15 | ///
16 | /// 一个强类型的资源类,用于查找本地化的字符串等。
17 | ///
18 | // 此类是由 StronglyTypedResourceBuilder
19 | // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
20 | // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
21 | // (以 /str 作为命令选项),或重新生成 VS 项目。
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | public class AboutMultilangConst {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal AboutMultilangConst() {
33 | }
34 |
35 | ///
36 | /// 返回此类使用的缓存的 ResourceManager 实例。
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | public static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Sheas_Cealer.Consts.AboutMultilangConst", typeof(AboutMultilangConst).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// 重写当前线程的 CurrentUICulture 属性,对
51 | /// 使用此强类型资源类的所有资源查找执行重写。
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | public static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 |
63 | ///
64 | /// 查找类似 Password: 的本地化字符串。
65 | ///
66 | public static string _ReleasePagePasswordLabel {
67 | get {
68 | return ResourceManager.GetString("_ReleasePagePasswordLabel", resourceCulture);
69 | }
70 | }
71 |
72 | ///
73 | /// 查找类似 EULA 的本地化字符串。
74 | ///
75 | public static string AgreementButtonContent {
76 | get {
77 | return ResourceManager.GetString("AgreementButtonContent", resourceCulture);
78 | }
79 | }
80 |
81 | ///
82 | /// 查找类似 Dev. Space Time 的本地化字符串。
83 | ///
84 | public static string DeveloperButtonContent {
85 | get {
86 | return ResourceManager.GetString("DeveloperButtonContent", resourceCulture);
87 | }
88 | }
89 |
90 | ///
91 | /// 查找类似 Docs 的本地化字符串。
92 | ///
93 | public static string DocumentationButtonContent {
94 | get {
95 | return ResourceManager.GetString("DocumentationButtonContent", resourceCulture);
96 | }
97 | }
98 |
99 | ///
100 | /// 查找类似 Email 的本地化字符串。
101 | ///
102 | public static string EmailButtonContent {
103 | get {
104 | return ResourceManager.GetString("EmailButtonContent", resourceCulture);
105 | }
106 | }
107 |
108 | ///
109 | /// 查找类似 PP 的本地化字符串。
110 | ///
111 | public static string PolicyButtonContent {
112 | get {
113 | return ResourceManager.GetString("PolicyButtonContent", resourceCulture);
114 | }
115 | }
116 |
117 | ///
118 | /// 查找类似 Repo 的本地化字符串。
119 | ///
120 | public static string RepositoryButtonContent {
121 | get {
122 | return ResourceManager.GetString("RepositoryButtonContent", resourceCulture);
123 | }
124 | }
125 |
126 | ///
127 | /// 查找类似 Ver. 的本地化字符串。
128 | ///
129 | public static string VersionButtonLabelContent {
130 | get {
131 | return ResourceManager.GetString("VersionButtonLabelContent", resourceCulture);
132 | }
133 | }
134 | }
135 | }
136 |
--------------------------------------------------------------------------------
/Consts/AboutMultilangConst.zh.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 | text/microsoft-resx
90 |
91 |
92 | 1.3
93 |
94 |
95 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
96 |
97 |
98 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
99 |
100 |
101 | 使用协议
102 |
103 |
104 | 开发者: Space Time
105 |
106 |
107 | 使用文档
108 |
109 |
110 | 联系邮箱
111 |
112 |
113 | 隐私政策
114 |
115 |
116 | 开源地址
117 |
118 |
119 | 版本号:
120 |
121 |
122 | 密码:
123 |
124 |
--------------------------------------------------------------------------------
/Consts/SettingsMultilangConst.zh.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 | text/microsoft-resx
90 |
91 |
92 | 1.3
93 |
94 |
95 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
96 |
97 |
98 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
99 |
100 |
101 | 切换颜色 (全随机)
102 |
103 |
104 | 点击切换按钮颜色
105 |
106 |
107 | 切换语言 (中文 → En)
108 |
109 |
110 | 切换语言 (En → 系统)
111 |
112 |
113 | 切换语言 (系统 → 中文)
114 |
115 |
116 | 点击切换界面语言
117 |
118 |
119 | 切换主题 (暗色 → 亮色)
120 |
121 |
122 | 切换主题 (系统 → 暗色)
123 |
124 |
125 | 切换主题 (亮色 → 系统)
126 |
127 |
128 | 点击切换显示主题
129 |
130 |
131 | 切换字重 (粗体 → 细体)
132 |
133 |
134 | 切换字重 (细体 → 标准)
135 |
136 |
137 | 切换字重 (标准 → 粗体)
138 |
139 |
140 | 点击切换字体粗细
141 |
142 |
143 | 语言更改完成,重启以刷新界面
144 |
145 |
--------------------------------------------------------------------------------
/Consts/SettingsMultilangConst.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 | text/microsoft-resx
90 |
91 |
92 | 1.3
93 |
94 |
95 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
96 |
97 |
98 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
99 |
100 |
101 | SWT. Color (Fully Random)
102 |
103 |
104 | Click to switch colors
105 |
106 |
107 | Switch Lang (中文 → En)
108 |
109 |
110 | Switch Lang (En → Auto)
111 |
112 |
113 | Switch Lang (Auto → 中文)
114 |
115 |
116 | Click to switch langs
117 |
118 |
119 | SWT. Theme (Dark → Light)
120 |
121 |
122 | SWT. Theme (Auto → Dark)
123 |
124 |
125 | SWT. Theme (Light → Auto)
126 |
127 |
128 | Click to switch themes
129 |
130 |
131 | SWT. Weight (Bold → Light)
132 |
133 |
134 | SWT. Weight (Light → Regular)
135 |
136 |
137 | SWT. Weight (RGL. → Bold)
138 |
139 |
140 | Click to switch font weights
141 |
142 |
143 | Switch successfuly, restart to refresh the windows
144 |
145 |
--------------------------------------------------------------------------------
/Consts/AboutMultilangConst.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | EULA
122 |
123 |
124 | Dev. Space Time
125 |
126 |
127 | Docs
128 |
129 |
130 | Email
131 |
132 |
133 | PP
134 |
135 |
136 | Repo
137 |
138 |
139 | Ver.
140 |
141 |
142 | Password:
143 |
144 |
--------------------------------------------------------------------------------
/Consts/SettingsMultilangConst.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 此代码由工具生成。
4 | // 运行时版本:4.0.30319.42000
5 | //
6 | // 对此文件的更改可能会导致不正确的行为,并且如果
7 | // 重新生成代码,这些更改将会丢失。
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace Sheas_Cealer.Consts {
12 | using System;
13 |
14 |
15 | ///
16 | /// 一个强类型的资源类,用于查找本地化的字符串等。
17 | ///
18 | // 此类是由 StronglyTypedResourceBuilder
19 | // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
20 | // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
21 | // (以 /str 作为命令选项),或重新生成 VS 项目。
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | public class SettingsMultilangConst {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal SettingsMultilangConst() {
33 | }
34 |
35 | ///
36 | /// 返回此类使用的缓存的 ResourceManager 实例。
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | public static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Sheas_Cealer.Consts.SettingsMultilangConst", typeof(SettingsMultilangConst).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// 重写当前线程的 CurrentUICulture 属性,对
51 | /// 使用此强类型资源类的所有资源查找执行重写。
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | public static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 |
63 | ///
64 | /// 查找类似 Switch successfuly, restart to refresh the windows 的本地化字符串。
65 | ///
66 | public static string _ChangeLangSuccessMsg {
67 | get {
68 | return ResourceManager.GetString("_ChangeLangSuccessMsg", resourceCulture);
69 | }
70 | }
71 |
72 | ///
73 | /// 查找类似 SWT. Color (Fully Random) 的本地化字符串。
74 | ///
75 | public static string ColorsButtonContent {
76 | get {
77 | return ResourceManager.GetString("ColorsButtonContent", resourceCulture);
78 | }
79 | }
80 |
81 | ///
82 | /// 查找类似 Click to switch colors 的本地化字符串。
83 | ///
84 | public static string ColorsButtonToolTip {
85 | get {
86 | return ResourceManager.GetString("ColorsButtonToolTip", resourceCulture);
87 | }
88 | }
89 |
90 | ///
91 | /// 查找类似 Switch Lang (中文 → En) 的本地化字符串。
92 | ///
93 | public static string LangsButtonChineseLangContent {
94 | get {
95 | return ResourceManager.GetString("LangsButtonChineseLangContent", resourceCulture);
96 | }
97 | }
98 |
99 | ///
100 | /// 查找类似 Switch Lang (En → Auto) 的本地化字符串。
101 | ///
102 | public static string LangsButtonEnglishLangContent {
103 | get {
104 | return ResourceManager.GetString("LangsButtonEnglishLangContent", resourceCulture);
105 | }
106 | }
107 |
108 | ///
109 | /// 查找类似 Switch Lang (Auto → 中文) 的本地化字符串。
110 | ///
111 | public static string LangsButtonInheritLangContent {
112 | get {
113 | return ResourceManager.GetString("LangsButtonInheritLangContent", resourceCulture);
114 | }
115 | }
116 |
117 | ///
118 | /// 查找类似 Click to switch langs 的本地化字符串。
119 | ///
120 | public static string LangsButtonToolTip {
121 | get {
122 | return ResourceManager.GetString("LangsButtonToolTip", resourceCulture);
123 | }
124 | }
125 |
126 | ///
127 | /// 查找类似 SWT. Theme (Dark → Light) 的本地化字符串。
128 | ///
129 | public static string ThemesButtonDarkThemeContent {
130 | get {
131 | return ResourceManager.GetString("ThemesButtonDarkThemeContent", resourceCulture);
132 | }
133 | }
134 |
135 | ///
136 | /// 查找类似 SWT. Theme (Auto → Dark) 的本地化字符串。
137 | ///
138 | public static string ThemesButtonInheritThemeContent {
139 | get {
140 | return ResourceManager.GetString("ThemesButtonInheritThemeContent", resourceCulture);
141 | }
142 | }
143 |
144 | ///
145 | /// 查找类似 SWT. Theme (Light → Auto) 的本地化字符串。
146 | ///
147 | public static string ThemesButtonLightThemeContent {
148 | get {
149 | return ResourceManager.GetString("ThemesButtonLightThemeContent", resourceCulture);
150 | }
151 | }
152 |
153 | ///
154 | /// 查找类似 Click to switch themes 的本地化字符串。
155 | ///
156 | public static string ThemesButtonToolTip {
157 | get {
158 | return ResourceManager.GetString("ThemesButtonToolTip", resourceCulture);
159 | }
160 | }
161 |
162 | ///
163 | /// 查找类似 SWT. Weight (Bold → Light) 的本地化字符串。
164 | ///
165 | public static string WeightsButtonBoldWeightContent {
166 | get {
167 | return ResourceManager.GetString("WeightsButtonBoldWeightContent", resourceCulture);
168 | }
169 | }
170 |
171 | ///
172 | /// 查找类似 SWT. Weight (Light → Regular) 的本地化字符串。
173 | ///
174 | public static string WeightsButtonLightWeightContent {
175 | get {
176 | return ResourceManager.GetString("WeightsButtonLightWeightContent", resourceCulture);
177 | }
178 | }
179 |
180 | ///
181 | /// 查找类似 SWT. Weight (RGL. → Bold) 的本地化字符串。
182 | ///
183 | public static string WeightsButtonRegularWeightContent {
184 | get {
185 | return ResourceManager.GetString("WeightsButtonRegularWeightContent", resourceCulture);
186 | }
187 | }
188 |
189 | ///
190 | /// 查找类似 Click to switch font weights 的本地化字符串。
191 | ///
192 | public static string WeightsButtonToolTip {
193 | get {
194 | return ResourceManager.GetString("WeightsButtonToolTip", resourceCulture);
195 | }
196 | }
197 | }
198 | }
199 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.rsuser
8 | *.suo
9 | *.user
10 | *.userosscache
11 | *.sln.docstates
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Mono auto generated files
17 | mono_crash.*
18 |
19 | # Build results
20 | [Dd]ebug/
21 | [Dd]ebugPublic/
22 | [Rr]elease/
23 | [Rr]eleases/
24 | x64/
25 | x86/
26 | [Ww][Ii][Nn]32/
27 | [Aa][Rr][Mm]/
28 | [Aa][Rr][Mm]64/
29 | bld/
30 | [Bb]in/
31 | [Oo]bj/
32 | [Oo]ut/
33 | [Ll]og/
34 | [Ll]ogs/
35 |
36 | # Visual Studio 2015/2017 cache/options directory
37 | .vs/
38 | # Uncomment if you have tasks that create the project's static files in wwwroot
39 | #wwwroot/
40 |
41 | # Visual Studio 2017 auto generated files
42 | Generated\ Files/
43 |
44 | # MSTest test Results
45 | [Tt]est[Rr]esult*/
46 | [Bb]uild[Ll]og.*
47 |
48 | # NUnit
49 | *.VisualState.xml
50 | TestResult.xml
51 | nunit-*.xml
52 |
53 | # Build Results of an ATL Project
54 | [Dd]ebugPS/
55 | [Rr]eleasePS/
56 | dlldata.c
57 |
58 | # Benchmark Results
59 | BenchmarkDotNet.Artifacts/
60 |
61 | # .NET Core
62 | project.lock.json
63 | project.fragment.lock.json
64 | artifacts/
65 |
66 | # ASP.NET Scaffolding
67 | ScaffoldingReadMe.txt
68 |
69 | # StyleCop
70 | StyleCopReport.xml
71 |
72 | # Files built by Visual Studio
73 | *_i.c
74 | *_p.c
75 | *_h.h
76 | *.ilk
77 | *.meta
78 | *.obj
79 | *.iobj
80 | *.pch
81 | *.pdb
82 | *.ipdb
83 | *.pgc
84 | *.pgd
85 | *.rsp
86 | *.sbr
87 | *.tlb
88 | *.tli
89 | *.tlh
90 | *.tmp
91 | *.tmp_proj
92 | *_wpftmp.csproj
93 | *.log
94 | *.vspscc
95 | *.vssscc
96 | .builds
97 | *.pidb
98 | *.svclog
99 | *.scc
100 |
101 | # Chutzpah Test files
102 | _Chutzpah*
103 |
104 | # Visual C++ cache files
105 | ipch/
106 | *.aps
107 | *.ncb
108 | *.opendb
109 | *.opensdf
110 | *.sdf
111 | *.cachefile
112 | *.VC.db
113 | *.VC.VC.opendb
114 |
115 | # Visual Studio profiler
116 | *.psess
117 | *.vsp
118 | *.vspx
119 | *.sap
120 |
121 | # Visual Studio Trace Files
122 | *.e2e
123 |
124 | # TFS 2012 Local Workspace
125 | $tf/
126 |
127 | # Guidance Automation Toolkit
128 | *.gpState
129 |
130 | # ReSharper is a .NET coding add-in
131 | _ReSharper*/
132 | *.[Rr]e[Ss]harper
133 | *.DotSettings.user
134 |
135 | # TeamCity is a build add-in
136 | _TeamCity*
137 |
138 | # DotCover is a Code Coverage Tool
139 | *.dotCover
140 |
141 | # AxoCover is a Code Coverage Tool
142 | .axoCover/*
143 | !.axoCover/settings.json
144 |
145 | # Coverlet is a free, cross platform Code Coverage Tool
146 | coverage*.json
147 | coverage*.xml
148 | coverage*.info
149 |
150 | # Visual Studio code coverage results
151 | *.coverage
152 | *.coveragexml
153 |
154 | # NCrunch
155 | _NCrunch_*
156 | .*crunch*.local.xml
157 | nCrunchTemp_*
158 |
159 | # MightyMoose
160 | *.mm.*
161 | AutoTest.Net/
162 |
163 | # Web workbench (sass)
164 | .sass-cache/
165 |
166 | # Installshield output folder
167 | [Ee]xpress/
168 |
169 | # DocProject is a documentation generator add-in
170 | DocProject/buildhelp/
171 | DocProject/Help/*.HxT
172 | DocProject/Help/*.HxC
173 | DocProject/Help/*.hhc
174 | DocProject/Help/*.hhk
175 | DocProject/Help/*.hhp
176 | DocProject/Help/Html2
177 | DocProject/Help/html
178 |
179 | # Click-Once directory
180 | publish/
181 |
182 | # Publish Web Output
183 | *.[Pp]ublish.xml
184 | *.azurePubxml
185 | # Note: Comment the next line if you want to checkin your web deploy settings,
186 | # but database connection strings (with potential passwords) will be unencrypted
187 | *.pubxml
188 | *.publishproj
189 |
190 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
191 | # checkin your Azure Web App publish settings, but sensitive information contained
192 | # in these scripts will be unencrypted
193 | PublishScripts/
194 |
195 | # NuGet Packages
196 | *.nupkg
197 | # NuGet Symbol Packages
198 | *.snupkg
199 | # The packages folder can be ignored because of Package Restore
200 | **/[Pp]ackages/*
201 | # except build/, which is used as an MSBuild target.
202 | !**/[Pp]ackages/build/
203 | # Uncomment if necessary however generally it will be regenerated when needed
204 | #!**/[Pp]ackages/repositories.config
205 | # NuGet v3's project.json files produces more ignorable files
206 | *.nuget.props
207 | *.nuget.targets
208 |
209 | # Microsoft Azure Build Output
210 | csx/
211 | *.build.csdef
212 |
213 | # Microsoft Azure Emulator
214 | ecf/
215 | rcf/
216 |
217 | # Windows Store app package directories and files
218 | AppPackages/
219 | BundleArtifacts/
220 | Package.StoreAssociation.xml
221 | _pkginfo.txt
222 | *.appx
223 | *.appxbundle
224 | *.appxupload
225 |
226 | # Visual Studio cache files
227 | # files ending in .cache can be ignored
228 | *.[Cc]ache
229 | # but keep track of directories ending in .cache
230 | !?*.[Cc]ache/
231 |
232 | # Others
233 | ClientBin/
234 | ~$*
235 | *~
236 | *.dbmdl
237 | *.dbproj.schemaview
238 | *.jfm
239 | *.pfx
240 | *.publishsettings
241 | orleans.codegen.cs
242 |
243 | # Including strong name files can present a security risk
244 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
245 | #*.snk
246 |
247 | # Since there are multiple workflows, uncomment next line to ignore bower_components
248 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
249 | #bower_components/
250 |
251 | # RIA/Silverlight projects
252 | Generated_Code/
253 |
254 | # Backup & report files from converting an old project file
255 | # to a newer Visual Studio version. Backup files are not needed,
256 | # because we have git ;-)
257 | _UpgradeReport_Files/
258 | Backup*/
259 | UpgradeLog*.XML
260 | UpgradeLog*.htm
261 | ServiceFabricBackup/
262 | *.rptproj.bak
263 |
264 | # SQL Server files
265 | *.mdf
266 | *.ldf
267 | *.ndf
268 |
269 | # Business Intelligence projects
270 | *.rdl.data
271 | *.bim.layout
272 | *.bim_*.settings
273 | *.rptproj.rsuser
274 | *- [Bb]ackup.rdl
275 | *- [Bb]ackup ([0-9]).rdl
276 | *- [Bb]ackup ([0-9][0-9]).rdl
277 |
278 | # Microsoft Fakes
279 | FakesAssemblies/
280 |
281 | # GhostDoc plugin setting file
282 | *.GhostDoc.xml
283 |
284 | # Node.js Tools for Visual Studio
285 | .ntvs_analysis.dat
286 | node_modules/
287 |
288 | # Visual Studio 6 build log
289 | *.plg
290 |
291 | # Visual Studio 6 workspace options file
292 | *.opt
293 |
294 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
295 | *.vbw
296 |
297 | # Visual Studio LightSwitch build output
298 | **/*.HTMLClient/GeneratedArtifacts
299 | **/*.DesktopClient/GeneratedArtifacts
300 | **/*.DesktopClient/ModelManifest.xml
301 | **/*.Server/GeneratedArtifacts
302 | **/*.Server/ModelManifest.xml
303 | _Pvt_Extensions
304 |
305 | # Paket dependency manager
306 | .paket/paket.exe
307 | paket-files/
308 |
309 | # FAKE - F# Make
310 | .fake/
311 |
312 | # CodeRush personal settings
313 | .cr/personal
314 |
315 | # Python Tools for Visual Studio (PTVS)
316 | __pycache__/
317 | *.pyc
318 |
319 | # Cake - Uncomment if you are using it
320 | # tools/**
321 | # !tools/packages.config
322 |
323 | # Tabs Studio
324 | *.tss
325 |
326 | # Telerik's JustMock configuration file
327 | *.jmconfig
328 |
329 | # BizTalk build output
330 | *.btp.cs
331 | *.btm.cs
332 | *.odx.cs
333 | *.xsd.cs
334 |
335 | # OpenCover UI analysis results
336 | OpenCover/
337 |
338 | # Azure Stream Analytics local run output
339 | ASALocalRun/
340 |
341 | # MSBuild Binary and Structured Log
342 | *.binlog
343 |
344 | # NVidia Nsight GPU debugger configuration file
345 | *.nvuser
346 |
347 | # MFractors (Xamarin productivity tool) working folder
348 | .mfractor/
349 |
350 | # Local History for Visual Studio
351 | .localhistory/
352 |
353 | # BeatPulse healthcheck temp database
354 | healthchecksdb
355 |
356 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
357 | MigrationBackup/
358 |
359 | # Ionide (cross platform F# VS Code tools) working folder
360 | .ionide/
361 |
362 | # Fody - auto-generated XML schema
363 | FodyWeavers.xsd
--------------------------------------------------------------------------------
/Consts/MainMultilangConst.zh.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 关于项目
122 |
123 |
124 | 点击打开关于窗口
125 |
126 |
127 | 启动伪造
128 |
129 |
130 | 点击启动参数注入完成的浏览器
131 |
132 |
133 | 全局净化调整中
134 |
135 |
136 | 全局伪造启动中
137 |
138 |
139 | 编辑 Hosts 配置
140 |
141 |
142 | 点击编辑 Hosts 配置
143 |
144 |
145 | 编辑本地规则
146 |
147 |
148 | 点击编辑本地规则
149 |
150 |
151 | 编辑 Mihomo 配置
152 |
153 |
154 | 点击编辑 Mihomo 配置
155 |
156 |
157 | 编辑 Nginx 配置
158 |
159 |
160 | 点击编辑 Nginx 配置
161 |
162 |
163 | 编辑上游规则
164 |
165 |
166 | 点击编辑上游规则
167 |
168 |
169 | 全局净化启动中
170 |
171 |
172 | 停止全局净化
173 |
174 |
175 | 点击停止本地 Mihomo
176 |
177 |
178 | 启动全局净化
179 |
180 |
181 | 点击启动本地 Mihomo
182 |
183 |
184 | 全局净化停止中
185 |
186 |
187 | 全局伪造启动中
188 |
189 |
190 | 停止全局伪造
191 |
192 |
193 | 点击停止 Nginx
194 |
195 |
196 | 启动全局伪造
197 |
198 |
199 | 点击启动本地 Nginx
200 |
201 |
202 | 赶紧点我
203 |
204 |
205 | 赶紧点击这个按钮
206 |
207 |
208 | 不要点我
209 |
210 |
211 | 不要点击这个按钮
212 |
213 |
214 | 填入任意以 Chromium 为内核的浏览器路径
215 |
216 |
217 | 填入任意额外的 Chromium 启动参数
218 |
219 |
220 | 填入任意上游规则链接
221 |
222 |
223 | 界面设置
224 |
225 |
226 | 点击打开设置窗口
227 |
228 |
229 | 浏览路径
230 |
231 |
232 | 清除参数
233 |
234 |
235 | 点击处理设置内容
236 |
237 |
238 | 重置链接
239 |
240 |
241 | 文件路径
242 |
243 |
244 | 额外参数
245 |
246 |
247 | 点击切换设置模式
248 |
249 |
250 | 上游链接
251 |
252 |
253 | 更新上游规则
254 |
255 |
256 | 点击更新上游规则
257 |
258 |
259 | 浏览器
260 |
261 |
262 | 伪造规则含有语法错误,部分规则无法识别,是否仍然继续?
263 |
264 |
265 | 就知道你会点,但其实什么事情都不会发生的。嘻嘻~
266 |
267 |
268 | 呜,你在做什么。求求你不要再继续点了,我不想伤害大家。快停下,这是最后一次机会。呃,我快要控制不住了
269 |
270 |
271 | 不不不,不要点我。对不起,我不该骗你的,我是一个受诅咒的按钮,继续点我会给整个 Sheas Cealer 带来灾难的。请相信我,这不是游戏,这里也没有新功能。听我的,去用正常的功能好吗,求求你了
272 |
273 |
274 | 你击败了邪恶的按钮,拯救了 Sheas Cealer,你是英雄!
275 |
276 |
277 | 按钮剩余血量:
278 |
279 |
280 | 它死了,你是 Sheas Cealer 的英雄
281 |
282 |
283 | 不,求你杀了我,我... 控制不住了...
284 |
285 |
286 | 启动前将关闭所选浏览器的所有进程,是否继续?
287 |
288 |
289 | 正在使用基于 Hosts 的非泛域名全局伪造,是否继续?
290 |
291 |
292 | Mihomo 启动失败
293 |
294 |
295 | Nginx 启动失败,是否打开错误日志?
296 |
297 |
298 | Warning: 代理核心正在遭受攻击,无法伪造 SNI,已紧急开启 SNI 拔除模式,是否继续?
299 |
300 |
301 | 使用完请务必记得回来手动关闭代理,是否继续?
302 |
303 |
304 | Mihomo 配置文件含有语法错误,部分配置无法识别
305 |
306 |
307 | 本地 80 端口被占用,是否换用 {0} 端口继续? 这可能导致 http 连接无法自动跳转到 https
308 |
309 |
310 | 本地 443 端口被占用,是否换用 {0} 端口继续? 这可能导致全局伪造无法正常工作
311 |
312 |
313 | 上游规则有更新可用,需要更新吗?否则只为你打开上游规则网页
314 |
315 |
316 | 更新已完成
317 |
318 |
319 | 上游规则已经更到最新了
320 |
321 |
--------------------------------------------------------------------------------
/Wins/MainWin.xaml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
37 |
43 |
44 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
77 |
106 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
144 |
148 |
165 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
192 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
210 |
216 |
220 |
221 |
222 |
--------------------------------------------------------------------------------
/Consts/MainMultilangConst.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | About Me
122 |
123 |
124 | Click to open the about window
125 |
126 |
127 | Start Cealing
128 |
129 |
130 | Click to launch the injected browser
131 |
132 |
133 | GLB. Purging CHA.
134 |
135 |
136 | GLB. Cealing INIT.
137 |
138 |
139 | Edit Hosts Conf
140 |
141 |
142 | Click to edit hosts conf
143 |
144 |
145 | Edit Local Host
146 |
147 |
148 | Click to edit local host
149 |
150 |
151 | Edit Mihomo Conf
152 |
153 |
154 | Click to edit mihomo conf
155 |
156 |
157 | Edit Nginx Conf
158 |
159 |
160 | Click to edit nginx conf
161 |
162 |
163 | Edit UPSTR. Host
164 |
165 |
166 | Click to edit upstream host
167 |
168 |
169 | GLB. Purging INIT.
170 |
171 |
172 | Stop GLB. Purging
173 |
174 |
175 | Click to stop the local Mihomo
176 |
177 |
178 | Start GLB. Purging
179 |
180 |
181 | Click to launch a local Mihomo
182 |
183 |
184 | GLB. Purging STP.
185 |
186 |
187 | GLB. Cealing INIT.
188 |
189 |
190 | Stop GLB. Cealing
191 |
192 |
193 | Click to stop the local Nginx
194 |
195 |
196 | Start GLB. Cealing
197 |
198 |
199 | Click to launch a local Nginx
200 |
201 |
202 | Click Now
203 |
204 |
205 | Click this button now
206 |
207 |
208 | No Clicking
209 |
210 |
211 | Do not click this button
212 |
213 |
214 | Fill in a Chromium-based browser path
215 |
216 |
217 | Fill in extra Chromium startup args
218 |
219 |
220 | Fill in an upstream host URL
221 |
222 |
223 | Appearance Settings
224 |
225 |
226 | Click to open the settings window
227 |
228 |
229 | Browse Path
230 |
231 |
232 | Clear Args
233 |
234 |
235 | Click to process settings
236 |
237 |
238 | Reset URL
239 |
240 |
241 | Browser Path
242 |
243 |
244 | Extra Args
245 |
246 |
247 | Click to switch settings
248 |
249 |
250 | Upstream URL
251 |
252 |
253 | Update Upstream Host
254 |
255 |
256 | Click to update upstream host
257 |
258 |
259 | Browser
260 |
261 |
262 | Some cealing hosts contain syntax errors and cannot be recognized. Do you want to continue anyway?
263 |
264 |
265 | I know you would click me, but nothing will actually happen. Whee~
266 |
267 |
268 | Ugh, what are you doing. Please stop, I don't want to hurt anyone. Stop please, this is your last chance. Ugh, I can't control it anymore
269 |
270 |
271 | No no no, don't click me. Sorry, I shouldn't have lied to you, I am a cursed button, and continuing to click me will bring disaster to the entire Sheas Cealer. Please believe me. This is not a game, and there are no new features here. Listen to me and use the normal functions. Please
272 |
273 |
274 | You defeated the evil button and saved Sheas Cealer. You are the HERO!
275 |
276 |
277 | Button Remaining HP.
278 |
279 |
280 | It's dead. You're the HERO of Sheas Cealer
281 |
282 |
283 | No, please kill me. I... can't control it...
284 |
285 |
286 | All processes of the selected browser will be closed before launching. Do you want to continue?
287 |
288 |
289 | You are using hosts-based non-wildcard domain global cealing. Do you want to continue?
290 |
291 |
292 | Mihomo failed to launch
293 |
294 |
295 | Nginx failed to launch. Do you want to open the error log?
296 |
297 |
298 | Warning: The proxy core is under attack and failes to conceal SNI. The SNI removal mode has been turned on urgently. Do you want to continue?
299 |
300 |
301 | Please remember to come back and stop the proxy manually after use. Do you want to continue?
302 |
303 |
304 | The mihomo conf contains syntax errors and cannot be recognized
305 |
306 |
307 | The local port 80 is occupied. Do you want to use port {0} to continue? This may cause the http connection to fail to automatically jump to https
308 |
309 |
310 | The local port 443 is occupied. Do you want to use port {0} to continue? This may cause the global cealing to not work properly
311 |
312 |
313 | There is an update available. Do you want to update upstream host? If No it will only open the upstream host web page for you
314 |
315 |
316 | Update successfully
317 |
318 |
319 | Upstream host is already up to date
320 |
321 |
--------------------------------------------------------------------------------
/Consts/MainMultilangConst.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 此代码由工具生成。
4 | // 运行时版本:4.0.30319.42000
5 | //
6 | // 对此文件的更改可能会导致不正确的行为,并且如果
7 | // 重新生成代码,这些更改将会丢失。
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace Sheas_Cealer.Consts {
12 | using System;
13 |
14 |
15 | ///
16 | /// 一个强类型的资源类,用于查找本地化的字符串等。
17 | ///
18 | // 此类是由 StronglyTypedResourceBuilder
19 | // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
20 | // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
21 | // (以 /str 作为命令选项),或重新生成 VS 项目。
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | public class MainMultilangConst {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal MainMultilangConst() {
33 | }
34 |
35 | ///
36 | /// 返回此类使用的缓存的 ResourceManager 实例。
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | public static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Sheas_Cealer.Consts.MainMultilangConst", typeof(MainMultilangConst).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// 重写当前线程的 CurrentUICulture 属性,对
51 | /// 使用此强类型资源类的所有资源查找执行重写。
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | public static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 |
63 | ///
64 | /// 查找类似 Browser 的本地化字符串。
65 | ///
66 | public static string _BrowserPathDialogFilterFileType {
67 | get {
68 | return ResourceManager.GetString("_BrowserPathDialogFilterFileType", resourceCulture);
69 | }
70 | }
71 |
72 | ///
73 | /// 查找类似 Some cealing hosts contain syntax errors and cannot be recognized. Do you want to continue anyway? 的本地化字符串。
74 | ///
75 | public static string _CealHostErrorPrompt {
76 | get {
77 | return ResourceManager.GetString("_CealHostErrorPrompt", resourceCulture);
78 | }
79 | }
80 |
81 | ///
82 | /// 查找类似 I know you would click me, but nothing will actually happen. Whee~ 的本地化字符串。
83 | ///
84 | public static string _GameClickOnceMsg {
85 | get {
86 | return ResourceManager.GetString("_GameClickOnceMsg", resourceCulture);
87 | }
88 | }
89 |
90 | ///
91 | /// 查找类似 Ugh, what are you doing. Please stop, I don't want to hurt anyone. Stop please, this is your last chance. Ugh, I can't control it anymore 的本地化字符串。
92 | ///
93 | public static string _GameClickThreeMsg {
94 | get {
95 | return ResourceManager.GetString("_GameClickThreeMsg", resourceCulture);
96 | }
97 | }
98 |
99 | ///
100 | /// 查找类似 No no no, don't click me. Sorry, I shouldn't have lied to you, I am a cursed button, and continuing to click me will bring disaster to the entire Sheas Cealer. Please believe me. This is not a game, and there are no new features here. Listen to me and use the normal functions. Please 的本地化字符串。
101 | ///
102 | public static string _GameClickTwiceMsg {
103 | get {
104 | return ResourceManager.GetString("_GameClickTwiceMsg", resourceCulture);
105 | }
106 | }
107 |
108 | ///
109 | /// 查找类似 You defeated the evil button and saved Sheas Cealer. You are the HERO! 的本地化字符串。
110 | ///
111 | public static string _GameEndingMsg {
112 | get {
113 | return ResourceManager.GetString("_GameEndingMsg", resourceCulture);
114 | }
115 | }
116 |
117 | ///
118 | /// 查找类似 Button Remaining HP. 的本地化字符串。
119 | ///
120 | public static string _GameGradeMsg {
121 | get {
122 | return ResourceManager.GetString("_GameGradeMsg", resourceCulture);
123 | }
124 | }
125 |
126 | ///
127 | /// 查找类似 It's dead. You're the HERO of Sheas Cealer 的本地化字符串。
128 | ///
129 | public static string _GameReviewEndingMsg {
130 | get {
131 | return ResourceManager.GetString("_GameReviewEndingMsg", resourceCulture);
132 | }
133 | }
134 |
135 | ///
136 | /// 查找类似 No, please kill me. I... can't control it... 的本地化字符串。
137 | ///
138 | public static string _GameStartMsg {
139 | get {
140 | return ResourceManager.GetString("_GameStartMsg", resourceCulture);
141 | }
142 | }
143 |
144 | ///
145 | /// 查找类似 All processes of the selected browser will be closed before launching. Do you want to continue? 的本地化字符串。
146 | ///
147 | public static string _KillBrowserProcessPrompt {
148 | get {
149 | return ResourceManager.GetString("_KillBrowserProcessPrompt", resourceCulture);
150 | }
151 | }
152 |
153 | ///
154 | /// 查找类似 You are using hosts-based non-wildcard domain global cealing. Do you want to continue? 的本地化字符串。
155 | ///
156 | public static string _LaunchHostsNginxPrompt {
157 | get {
158 | return ResourceManager.GetString("_LaunchHostsNginxPrompt", resourceCulture);
159 | }
160 | }
161 |
162 | ///
163 | /// 查找类似 Mihomo failed to launch 的本地化字符串。
164 | ///
165 | public static string _LaunchMihomoErrorMsg {
166 | get {
167 | return ResourceManager.GetString("_LaunchMihomoErrorMsg", resourceCulture);
168 | }
169 | }
170 |
171 | ///
172 | /// 查找类似 Nginx failed to launch. Do you want to open the error log? 的本地化字符串。
173 | ///
174 | public static string _LaunchNginxErrorPrompt {
175 | get {
176 | return ResourceManager.GetString("_LaunchNginxErrorPrompt", resourceCulture);
177 | }
178 | }
179 |
180 | ///
181 | /// 查找类似 Warning: The proxy core is under attack and failes to conceal SNI. The SNI removal mode has been turned on urgently. Do you want to continue? 的本地化字符串。
182 | ///
183 | public static string _LaunchNginxFlashingPrompt {
184 | get {
185 | return ResourceManager.GetString("_LaunchNginxFlashingPrompt", resourceCulture);
186 | }
187 | }
188 |
189 | ///
190 | /// 查找类似 Please remember to come back and stop the proxy manually after use. Do you want to continue? 的本地化字符串。
191 | ///
192 | public static string _LaunchProxyPrompt {
193 | get {
194 | return ResourceManager.GetString("_LaunchProxyPrompt", resourceCulture);
195 | }
196 | }
197 |
198 | ///
199 | /// 查找类似 The mihomo conf contains syntax errors and cannot be recognized 的本地化字符串。
200 | ///
201 | public static string _MihomoConfErrorMsg {
202 | get {
203 | return ResourceManager.GetString("_MihomoConfErrorMsg", resourceCulture);
204 | }
205 | }
206 |
207 | ///
208 | /// 查找类似 The local port 80 is occupied. Do you want to use port {0} to continue? This may cause the http connection to fail to automatically jump to https 的本地化字符串。
209 | ///
210 | public static string _NginxHttpPortOccupiedPrompt {
211 | get {
212 | return ResourceManager.GetString("_NginxHttpPortOccupiedPrompt", resourceCulture);
213 | }
214 | }
215 |
216 | ///
217 | /// 查找类似 The local port 443 is occupied. Do you want to use port {0} to continue? This may cause the global cealing to not work properly 的本地化字符串。
218 | ///
219 | public static string _NginxHttpsPortOccupiedPrompt {
220 | get {
221 | return ResourceManager.GetString("_NginxHttpsPortOccupiedPrompt", resourceCulture);
222 | }
223 | }
224 |
225 | ///
226 | /// 查找类似 There is an update available. Do you want to update upstream host? If No it will only open the upstream host web page for you 的本地化字符串。
227 | ///
228 | public static string _OverrideUpstreamHostPrompt {
229 | get {
230 | return ResourceManager.GetString("_OverrideUpstreamHostPrompt", resourceCulture);
231 | }
232 | }
233 |
234 | ///
235 | /// 查找类似 Update successfully 的本地化字符串。
236 | ///
237 | public static string _UpdateUpstreamHostSuccessMsg {
238 | get {
239 | return ResourceManager.GetString("_UpdateUpstreamHostSuccessMsg", resourceCulture);
240 | }
241 | }
242 |
243 | ///
244 | /// 查找类似 Upstream host is already up to date 的本地化字符串。
245 | ///
246 | public static string _UpstreamHostUtdMsg {
247 | get {
248 | return ResourceManager.GetString("_UpstreamHostUtdMsg", resourceCulture);
249 | }
250 | }
251 |
252 | ///
253 | /// 查找类似 About Me 的本地化字符串。
254 | ///
255 | public static string AboutButtonContent {
256 | get {
257 | return ResourceManager.GetString("AboutButtonContent", resourceCulture);
258 | }
259 | }
260 |
261 | ///
262 | /// 查找类似 Click to open the about window 的本地化字符串。
263 | ///
264 | public static string AboutButtonToolTip {
265 | get {
266 | return ResourceManager.GetString("AboutButtonToolTip", resourceCulture);
267 | }
268 | }
269 |
270 | ///
271 | /// 查找类似 Start Cealing 的本地化字符串。
272 | ///
273 | public static string BrowserButtonContent {
274 | get {
275 | return ResourceManager.GetString("BrowserButtonContent", resourceCulture);
276 | }
277 | }
278 |
279 | ///
280 | /// 查找类似 Click to launch the injected browser 的本地化字符串。
281 | ///
282 | public static string BrowserButtonToolTip {
283 | get {
284 | return ResourceManager.GetString("BrowserButtonToolTip", resourceCulture);
285 | }
286 | }
287 |
288 | ///
289 | /// 查找类似 GLB. Purging CHA. 的本地化字符串。
290 | ///
291 | public static string ComihomoButtonIsInitingContent {
292 | get {
293 | return ResourceManager.GetString("ComihomoButtonIsInitingContent", resourceCulture);
294 | }
295 | }
296 |
297 | ///
298 | /// 查找类似 GLB. Cealing INIT. 的本地化字符串。
299 | ///
300 | public static string ConginxButtonIsInitingContent {
301 | get {
302 | return ResourceManager.GetString("ConginxButtonIsInitingContent", resourceCulture);
303 | }
304 | }
305 |
306 | ///
307 | /// 查找类似 Edit Hosts Conf 的本地化字符串。
308 | ///
309 | public static string EditHostsConfButtonContent {
310 | get {
311 | return ResourceManager.GetString("EditHostsConfButtonContent", resourceCulture);
312 | }
313 | }
314 |
315 | ///
316 | /// 查找类似 Click to edit hosts conf 的本地化字符串。
317 | ///
318 | public static string EditHostsConfButtonToolTip {
319 | get {
320 | return ResourceManager.GetString("EditHostsConfButtonToolTip", resourceCulture);
321 | }
322 | }
323 |
324 | ///
325 | /// 查找类似 Edit Local Host 的本地化字符串。
326 | ///
327 | public static string EditLocalHostButtonContent {
328 | get {
329 | return ResourceManager.GetString("EditLocalHostButtonContent", resourceCulture);
330 | }
331 | }
332 |
333 | ///
334 | /// 查找类似 Click to edit local host 的本地化字符串。
335 | ///
336 | public static string EditLocalHostButtonToolTip {
337 | get {
338 | return ResourceManager.GetString("EditLocalHostButtonToolTip", resourceCulture);
339 | }
340 | }
341 |
342 | ///
343 | /// 查找类似 Edit Mihomo Conf 的本地化字符串。
344 | ///
345 | public static string EditMihomoConfButtonContent {
346 | get {
347 | return ResourceManager.GetString("EditMihomoConfButtonContent", resourceCulture);
348 | }
349 | }
350 |
351 | ///
352 | /// 查找类似 Click to edit mihomo conf 的本地化字符串。
353 | ///
354 | public static string EditMihomoConfButtonToolTip {
355 | get {
356 | return ResourceManager.GetString("EditMihomoConfButtonToolTip", resourceCulture);
357 | }
358 | }
359 |
360 | ///
361 | /// 查找类似 Edit Nginx Conf 的本地化字符串。
362 | ///
363 | public static string EditNginxConfButtonContent {
364 | get {
365 | return ResourceManager.GetString("EditNginxConfButtonContent", resourceCulture);
366 | }
367 | }
368 |
369 | ///
370 | /// 查找类似 Click to edit nginx conf 的本地化字符串。
371 | ///
372 | public static string EditNginxConfButtonToolTip {
373 | get {
374 | return ResourceManager.GetString("EditNginxConfButtonToolTip", resourceCulture);
375 | }
376 | }
377 |
378 | ///
379 | /// 查找类似 Edit UPSTR. Host 的本地化字符串。
380 | ///
381 | public static string EditUpstreamHostButtonContent {
382 | get {
383 | return ResourceManager.GetString("EditUpstreamHostButtonContent", resourceCulture);
384 | }
385 | }
386 |
387 | ///
388 | /// 查找类似 Click to edit upstream host 的本地化字符串。
389 | ///
390 | public static string EditUpstreamHostButtonToolTip {
391 | get {
392 | return ResourceManager.GetString("EditUpstreamHostButtonToolTip", resourceCulture);
393 | }
394 | }
395 |
396 | ///
397 | /// 查找类似 GLB. Purging INIT. 的本地化字符串。
398 | ///
399 | public static string MihomoButtonIsInitingContent {
400 | get {
401 | return ResourceManager.GetString("MihomoButtonIsInitingContent", resourceCulture);
402 | }
403 | }
404 |
405 | ///
406 | /// 查找类似 Stop GLB. Purging 的本地化字符串。
407 | ///
408 | public static string MihomoButtonIsRunningContent {
409 | get {
410 | return ResourceManager.GetString("MihomoButtonIsRunningContent", resourceCulture);
411 | }
412 | }
413 |
414 | ///
415 | /// 查找类似 Click to stop the local Mihomo 的本地化字符串。
416 | ///
417 | public static string MihomoButtonIsRunningToolTip {
418 | get {
419 | return ResourceManager.GetString("MihomoButtonIsRunningToolTip", resourceCulture);
420 | }
421 | }
422 |
423 | ///
424 | /// 查找类似 Start GLB. Purging 的本地化字符串。
425 | ///
426 | public static string MihomoButtonIsStoppedContent {
427 | get {
428 | return ResourceManager.GetString("MihomoButtonIsStoppedContent", resourceCulture);
429 | }
430 | }
431 |
432 | ///
433 | /// 查找类似 Click to launch a local Mihomo 的本地化字符串。
434 | ///
435 | public static string MihomoButtonIsStoppedToolTip {
436 | get {
437 | return ResourceManager.GetString("MihomoButtonIsStoppedToolTip", resourceCulture);
438 | }
439 | }
440 |
441 | ///
442 | /// 查找类似 GLB. Purging STP. 的本地化字符串。
443 | ///
444 | public static string MihomoButtonIsStoppingContent {
445 | get {
446 | return ResourceManager.GetString("MihomoButtonIsStoppingContent", resourceCulture);
447 | }
448 | }
449 |
450 | ///
451 | /// 查找类似 GLB. Cealing INIT. 的本地化字符串。
452 | ///
453 | public static string NginxButtonIsInitingContent {
454 | get {
455 | return ResourceManager.GetString("NginxButtonIsInitingContent", resourceCulture);
456 | }
457 | }
458 |
459 | ///
460 | /// 查找类似 Stop GLB. Cealing 的本地化字符串。
461 | ///
462 | public static string NginxButtonIsRunningContent {
463 | get {
464 | return ResourceManager.GetString("NginxButtonIsRunningContent", resourceCulture);
465 | }
466 | }
467 |
468 | ///
469 | /// 查找类似 Click to stop the local Nginx 的本地化字符串。
470 | ///
471 | public static string NginxButtonIsRunningToolTip {
472 | get {
473 | return ResourceManager.GetString("NginxButtonIsRunningToolTip", resourceCulture);
474 | }
475 | }
476 |
477 | ///
478 | /// 查找类似 Start GLB. Cealing 的本地化字符串。
479 | ///
480 | public static string NginxButtonIsStoppedContent {
481 | get {
482 | return ResourceManager.GetString("NginxButtonIsStoppedContent", resourceCulture);
483 | }
484 | }
485 |
486 | ///
487 | /// 查找类似 Click to launch a local Nginx 的本地化字符串。
488 | ///
489 | public static string NginxButtonIsStoppedToolTip {
490 | get {
491 | return ResourceManager.GetString("NginxButtonIsStoppedToolTip", resourceCulture);
492 | }
493 | }
494 |
495 | ///
496 | /// 查找类似 Click Now 的本地化字符串。
497 | ///
498 | public static string NoClickButtonIsFlashingContent {
499 | get {
500 | return ResourceManager.GetString("NoClickButtonIsFlashingContent", resourceCulture);
501 | }
502 | }
503 |
504 | ///
505 | /// 查找类似 Click this button now 的本地化字符串。
506 | ///
507 | public static string NoClickButtonIsFlashingToolTip {
508 | get {
509 | return ResourceManager.GetString("NoClickButtonIsFlashingToolTip", resourceCulture);
510 | }
511 | }
512 |
513 | ///
514 | /// 查找类似 No Clicking 的本地化字符串。
515 | ///
516 | public static string NoClickButtonIsStoppedContent {
517 | get {
518 | return ResourceManager.GetString("NoClickButtonIsStoppedContent", resourceCulture);
519 | }
520 | }
521 |
522 | ///
523 | /// 查找类似 Do not click this button 的本地化字符串。
524 | ///
525 | public static string NoClickButtonIsStoppedToolTip {
526 | get {
527 | return ResourceManager.GetString("NoClickButtonIsStoppedToolTip", resourceCulture);
528 | }
529 | }
530 |
531 | ///
532 | /// 查找类似 Fill in a Chromium-based browser path 的本地化字符串。
533 | ///
534 | public static string SettingsBoxBrowserPathToolTip {
535 | get {
536 | return ResourceManager.GetString("SettingsBoxBrowserPathToolTip", resourceCulture);
537 | }
538 | }
539 |
540 | ///
541 | /// 查找类似 Fill in extra Chromium startup args 的本地化字符串。
542 | ///
543 | public static string SettingsBoxExtraArgsToolTip {
544 | get {
545 | return ResourceManager.GetString("SettingsBoxExtraArgsToolTip", resourceCulture);
546 | }
547 | }
548 |
549 | ///
550 | /// 查找类似 Fill in an upstream host URL 的本地化字符串。
551 | ///
552 | public static string SettingsBoxUpstreamUrlToolTip {
553 | get {
554 | return ResourceManager.GetString("SettingsBoxUpstreamUrlToolTip", resourceCulture);
555 | }
556 | }
557 |
558 | ///
559 | /// 查找类似 Appearance Settings 的本地化字符串。
560 | ///
561 | public static string SettingsButtonContent {
562 | get {
563 | return ResourceManager.GetString("SettingsButtonContent", resourceCulture);
564 | }
565 | }
566 |
567 | ///
568 | /// 查找类似 Click to open the settings window 的本地化字符串。
569 | ///
570 | public static string SettingsButtonToolTip {
571 | get {
572 | return ResourceManager.GetString("SettingsButtonToolTip", resourceCulture);
573 | }
574 | }
575 |
576 | ///
577 | /// 查找类似 Browse Path 的本地化字符串。
578 | ///
579 | public static string SettingsFunctionButtonBrowserPathContent {
580 | get {
581 | return ResourceManager.GetString("SettingsFunctionButtonBrowserPathContent", resourceCulture);
582 | }
583 | }
584 |
585 | ///
586 | /// 查找类似 Clear Args 的本地化字符串。
587 | ///
588 | public static string SettingsFunctionButtonExtraArgsContent {
589 | get {
590 | return ResourceManager.GetString("SettingsFunctionButtonExtraArgsContent", resourceCulture);
591 | }
592 | }
593 |
594 | ///
595 | /// 查找类似 Click to process settings 的本地化字符串。
596 | ///
597 | public static string SettingsFunctionButtonToolTip {
598 | get {
599 | return ResourceManager.GetString("SettingsFunctionButtonToolTip", resourceCulture);
600 | }
601 | }
602 |
603 | ///
604 | /// 查找类似 Reset URL 的本地化字符串。
605 | ///
606 | public static string SettingsFunctionButtonUpstreamUrlContent {
607 | get {
608 | return ResourceManager.GetString("SettingsFunctionButtonUpstreamUrlContent", resourceCulture);
609 | }
610 | }
611 |
612 | ///
613 | /// 查找类似 Browser Path 的本地化字符串。
614 | ///
615 | public static string SettingsModeButtonBrowserPathContent {
616 | get {
617 | return ResourceManager.GetString("SettingsModeButtonBrowserPathContent", resourceCulture);
618 | }
619 | }
620 |
621 | ///
622 | /// 查找类似 Extra Args 的本地化字符串。
623 | ///
624 | public static string SettingsModeButtonExtraArgsContent {
625 | get {
626 | return ResourceManager.GetString("SettingsModeButtonExtraArgsContent", resourceCulture);
627 | }
628 | }
629 |
630 | ///
631 | /// 查找类似 Click to switch settings 的本地化字符串。
632 | ///
633 | public static string SettingsModeButtonToolTip {
634 | get {
635 | return ResourceManager.GetString("SettingsModeButtonToolTip", resourceCulture);
636 | }
637 | }
638 |
639 | ///
640 | /// 查找类似 Upstream URL 的本地化字符串。
641 | ///
642 | public static string SettingsModeButtonUpstreamUrlContent {
643 | get {
644 | return ResourceManager.GetString("SettingsModeButtonUpstreamUrlContent", resourceCulture);
645 | }
646 | }
647 |
648 | ///
649 | /// 查找类似 Update Upstream Host 的本地化字符串。
650 | ///
651 | public static string UpdateUpstreamHostButtonContent {
652 | get {
653 | return ResourceManager.GetString("UpdateUpstreamHostButtonContent", resourceCulture);
654 | }
655 | }
656 |
657 | ///
658 | /// 查找类似 Click to update upstream host 的本地化字符串。
659 | ///
660 | public static string UpdateUpstreamHostButtonToolTip {
661 | get {
662 | return ResourceManager.GetString("UpdateUpstreamHostButtonToolTip", resourceCulture);
663 | }
664 | }
665 | }
666 | }
667 |
--------------------------------------------------------------------------------