diff --git a/ContextMenuManager/App.config b/ContextMenuManager/App.config index cfd720a..6b717eb 100644 --- a/ContextMenuManager/App.config +++ b/ContextMenuManager/App.config @@ -1,8 +1,8 @@ - - + + diff --git a/ContextMenuManager/AppConfig.cs b/ContextMenuManager/AppConfig.cs index 618001e..9e3ba8c 100644 --- a/ContextMenuManager/AppConfig.cs +++ b/ContextMenuManager/AppConfig.cs @@ -57,14 +57,15 @@ static AppConfig() }; private static readonly IniWriter ConfigWriter = new IniWriter(ConfigIni); + private static string GetGeneralValue(string key) => ConfigWriter.GetValue("General", key); + private static void SetGeneralValue(string key, object value) => ConfigWriter.SetValue("General", key, value); public static string LanguageIniPath => $@"{LangsDir}\{Language}.ini"; - public static string Language { get { - string language = ConfigWriter.GetValue("General", "Language"); + string language = GetGeneralValue("Language"); if(language == string.Empty) { language = new CultureInfo(GetUserDefaultUILanguage()).Name; @@ -75,13 +76,13 @@ public static string Language } return language; } - set => ConfigWriter.SetValue("General", "Language", value); + set => SetGeneralValue("Language", value); } public static bool AutoBackup { - get => ConfigWriter.GetValue("General", "AutoBackup") != "0"; - set => ConfigWriter.SetValue("General", "AutoBackup", value ? 1 : 0); + get => GetGeneralValue("AutoBackup") != "0"; + set => SetGeneralValue("AutoBackup", value ? 1 : 0); } public static DateTime LastCheckUpdateTime @@ -90,7 +91,7 @@ public static DateTime LastCheckUpdateTime { try { - string time = ConfigWriter.GetValue("General", "LastCheckUpdateTime"); + string time = GetGeneralValue("LastCheckUpdateTime"); //二进制数据时间不会受系统时间格式影响 return DateTime.FromBinary(Convert.ToInt64(time)); } @@ -102,60 +103,60 @@ public static DateTime LastCheckUpdateTime } set { - ConfigWriter.SetValue("General", "LastCheckUpdateTime", value.ToBinary()); + SetGeneralValue("LastCheckUpdateTime", value.ToBinary()); } } public static bool ProtectOpenItem { - get => ConfigWriter.GetValue("General", "ProtectOpenItem") != "0"; - set => ConfigWriter.SetValue("General", "ProtectOpenItem", value ? 1 : 0); + get => GetGeneralValue("ProtectOpenItem") != "0"; + set => SetGeneralValue("ProtectOpenItem", value ? 1 : 0); } public static string EngineUrl { get { - string url = ConfigWriter.GetValue("General", "EngineUrl"); + string url = GetGeneralValue("EngineUrl"); if(url.IsNullOrWhiteSpace()) url = EngineUrls[0]; return url; } set { - ConfigWriter.SetValue("General", "EngineUrl", value); + SetGeneralValue("EngineUrl", value); } } public static bool ShowFilePath { - get => ConfigWriter.GetValue("General", "ShowFilePath") == "1"; - set => ConfigWriter.SetValue("General", "ShowFilePath", value ? 1 : 0); + get => GetGeneralValue("ShowFilePath") == "1"; + set => SetGeneralValue("ShowFilePath", value ? 1 : 0); } public static bool WinXSortable { - get => ConfigWriter.GetValue("General", "WinXSortable") == "1"; - set => ConfigWriter.SetValue("General", "WinXSortable", value ? 1 : 0); + get => GetGeneralValue("WinXSortable") == "1"; + set => SetGeneralValue("WinXSortable", value ? 1 : 0); } public static bool OpenMoreRegedit { - get => ConfigWriter.GetValue("General", "OpenMoreRegedit") == "1"; - set => ConfigWriter.SetValue("General", "OpenMoreRegedit", value ? 1 : 0); + get => GetGeneralValue("OpenMoreRegedit") == "1"; + set => SetGeneralValue("OpenMoreRegedit", value ? 1 : 0); } public static Version Version { get { - Version version = new Version(); - try { version = new Version(ConfigWriter.GetValue("General", "Version")); } + Version version = new Version(0, 0, 0, 0); + try { version = new Version(GetGeneralValue("Version")); } catch { } return version; } set { - ConfigWriter.SetValue("General", "Version", value); + SetGeneralValue("Version", value); } } } diff --git a/ContextMenuManager/AppImage.cs b/ContextMenuManager/AppImage.cs index f00151f..81dff6c 100644 --- a/ContextMenuManager/AppImage.cs +++ b/ContextMenuManager/AppImage.cs @@ -35,6 +35,10 @@ public static class AppImage public static readonly Image AddSeparator = Resources.AddSeparator.ResizeImage(Scale); ///打开图标 public static readonly Image Open = Resources.Open.ResizeImage(Scale); + ///下载图标 + public static readonly Image DownLoad = Resources.DownLoad.ResizeImage(Scale); + ///翻译图标 + public static readonly Image Translate = Resources.Translate.ResizeImage(Scale); ///上图标 public static readonly Image Up = Resources.Up.ResizeImage(Scale); ///下图标 diff --git a/ContextMenuManager/AppString.cs b/ContextMenuManager/AppString.cs index d28452c..a49711a 100644 --- a/ContextMenuManager/AppString.cs +++ b/ContextMenuManager/AppString.cs @@ -6,7 +6,7 @@ namespace ContextMenuManager public static class AppString { public static readonly IniReader UserLanguage = new IniReader(AppConfig.LanguageIniPath); - private static readonly IniReader DefaultLanguage = new IniReader(new StringBuilder(Properties.Resources.AppLanguageDic)); + public static readonly IniReader DefaultLanguage = new IniReader(new StringBuilder(Properties.Resources.AppLanguageDic)); private static string GetStringValue(string section, string key) { @@ -61,6 +61,7 @@ public static class SideBar public static string DirectoryType => GetValue("DirectoryType"); public static string EnhanceMenu => GetValue("EnhanceMenu"); public static string ThirdRules => GetValue("ThirdRules"); + public static string OtherAccounts => GetValue("OtherAccounts"); public static string GuidBlocked => GetValue("GuidBlocked"); public static string DragDrop => GetValue("DragDrop"); public static string PublicReferences => GetValue("PublicReferences"); @@ -99,6 +100,7 @@ public static class StatusBar public static string DirectoryType => GetValue("DirectoryType"); public static string EnhanceMenu => GetValue("EnhanceMenu"); public static string ThirdRules => GetValue("ThirdRules"); + public static string OtherAccounts => GetValue("OtherAccounts"); public static string GuidBlocked => GetValue("GuidBlocked"); public static string DragDrop => GetValue("DragDrop"); public static string PublicReferences => GetValue("PublicReferences"); @@ -147,42 +149,6 @@ public static class Menu public static string Save => GetValue("Save"); } - /// 特殊项目文本 - public static class Item - { - private static string GetValue(string key) => GetStringValue("Item", key); - public static string Open => GetValue("Open"); - public static string Edit => GetValue("Edit"); - public static string Explore => GetValue("Explore"); - public static string ExploreOld => GetValue("ExploreOld"); - public static string Play => GetValue("Play"); - public static string Print => GetValue("Print"); - public static string Find => GetValue("Find"); - public static string Runas => GetValue("Runas"); - public static string CustomFolder => GetValue("CustomFolder"); - public static string MapNetworkDrive => GetValue("MapNetworkDrive"); - public static string DisconnectNetworkDrive => GetValue("DisconnectNetworkDrive"); - public static string RecycleBinProperties => GetValue("RecycleBinProperties"); - public static string RemovableDrive => GetValue("RemovableDrive"); - public static string BuildSendtoMenu => GetValue("BuildSendtoMenu"); - public static string UseStoreOpenWith => GetValue("UseStoreOpenWith"); - public static string NewItem => GetValue("NewItem"); - public static string AddGuidBlockedItem => GetValue("AddGuidBlockedItem"); - public static string SelectExtension => GetValue("SelectExtension"); - public static string SelectPerceivedType => GetValue("SelectPerceivedType"); - public static string SelectDirectoryType => GetValue("SelectDirectoryType"); - public static string CurrentExtension => GetValue("CurrentExtension"); - public static string CurrentPerceivedType => GetValue("CurrentPerceivedType"); - public static string CurrentDirectoryType => GetValue("CurrentDirectoryType"); - public static string EditSubItems => GetValue("EditSubItems"); - public static string InvalidItem => GetValue("InvalidItem"); - public static string Separator => GetValue("Separator"); - public static string LockNewMenu => GetValue("LockNewMenu"); - public static string WinXSortable => GetValue("WinXSortable"); - public static string ShowFilePath => GetValue("ShowFilePath"); - public static string OpenMoreRegedit => GetValue("OpenMoreRegedit"); - } - public static class Dialog { private static string GetValue(string key) => GetStringValue("Dialog", key); @@ -215,6 +181,9 @@ public static class Dialog public static string AudioDirectory => GetValue("AudioDirectory"); public static string CheckReference => GetValue("CheckReference"); public static string CheckCopy => GetValue("CheckCopy"); + public static string SelectExtension => GetValue("SelectExtension"); + public static string SelectPerceivedType => GetValue("SelectPerceivedType"); + public static string SelectDirectoryType => GetValue("SelectDirectoryType"); public static string SelectSubMenuMode => GetValue("SelectSubMenuMode"); public static string SelectNewItemType => GetValue("SelectNewItemType"); public static string RegistryFile => GetValue("RegistryFile"); @@ -260,11 +229,34 @@ public static class MessageBox public static class Other { private static string GetValue(string key) => GetStringValue("Other", key); + public static string Open => GetValue("Open"); + public static string Edit => GetValue("Edit"); + public static string Explore => GetValue("Explore"); + public static string ExploreOld => GetValue("ExploreOld"); + public static string Play => GetValue("Play"); + public static string Print => GetValue("Print"); + public static string Find => GetValue("Find"); + public static string Runas => GetValue("Runas"); + public static string CustomFolder => GetValue("CustomFolder"); + public static string MapNetworkDrive => GetValue("MapNetworkDrive"); + public static string DisconnectNetworkDrive => GetValue("DisconnectNetworkDrive"); + public static string RecycleBinProperties => GetValue("RecycleBinProperties"); + public static string RemovableDrive => GetValue("RemovableDrive"); + public static string BuildSendtoMenu => GetValue("BuildSendtoMenu"); + public static string UseStoreOpenWith => GetValue("UseStoreOpenWith"); + public static string NewItem => GetValue("NewItem"); + public static string AddGuidBlockedItem => GetValue("AddGuidBlockedItem"); + public static string CurrentExtension => GetValue("CurrentExtension"); + public static string CurrentPerceivedType => GetValue("CurrentPerceivedType"); + public static string CurrentDirectoryType => GetValue("CurrentDirectoryType"); + public static string EditSubItems => GetValue("EditSubItems"); + public static string InvalidItem => GetValue("InvalidItem"); + public static string Separator => GetValue("Separator"); + public static string LockNewMenu => GetValue("LockNewMenu"); public static string RestartExplorer => GetValue("RestartExplorer"); public static string DictionaryDescription => GetValue("DictionaryDescription"); public static string GuidInfosDictionary => GetValue("GuidInfosDictionary"); public static string Translators => GetValue("Translators"); - public static string OtherLanguages => GetValue("OtherLanguages"); public static string AboutApp => GetValue("AboutApp"); public static string Dictionaries => GetValue("Dictionaries"); public static string Donate => GetValue("Donate"); @@ -281,6 +273,9 @@ public static class Other public static string WebSearchEngine => GetValue("WebSearchEngine"); public static string CustomEngine => GetValue("CustomEngine"); public static string SetCustomEngine => GetValue("SetCustomEngine"); + public static string WinXSortable => GetValue("WinXSortable"); + public static string ShowFilePath => GetValue("ShowFilePath"); + public static string OpenMoreRegedit => GetValue("OpenMoreRegedit"); } /// 提示文本 @@ -301,6 +296,7 @@ public static class Tip public static string CheckUpdate => GetValue("CheckUpdate"); public static string LastCheckUpdateTime => GetValue("LastCheckUpdateTime"); public static string OpenLanguagesDir => GetValue("OpenLanguagesDir"); + public static string OtherLanguages => GetValue("OtherLanguages"); public static string OpenDictionariesDir => GetValue("OpenDictionariesDir"); public static string ConfigPath => GetValue("ConfigPath"); public static string CommandFiles => GetValue("CommandFiles"); diff --git a/ContextMenuManager/BluePointLilac.Methods/HighDpi.cs b/ContextMenuManager/BluePointLilac.Methods/HighDpi.cs index 085b07d..830ef6b 100644 --- a/ContextMenuManager/BluePointLilac.Methods/HighDpi.cs +++ b/ContextMenuManager/BluePointLilac.Methods/HighDpi.cs @@ -20,6 +20,8 @@ public static class HighDpi public static RectangleF DpiZoom(this RectangleF r) => new RectangleF(DpiZoom(r.Location), DpiZoom(r.Size)); + public static Padding DpiZoom(this Padding p) => new Padding(DpiZoom(p.Left), DpiZoom(p.Top), DpiZoom(p.Right), DpiZoom(p.Bottom)); + public static int DpiZoom(this int num) => (int)(num * DpiScale); public static float DpiZoom(this float num) => (float)(num * DpiScale); diff --git a/ContextMenuManager/BluePointLilac.Methods/SingleInstance.cs b/ContextMenuManager/BluePointLilac.Methods/SingleInstance.cs index 01b541c..3b1872d 100644 --- a/ContextMenuManager/BluePointLilac.Methods/SingleInstance.cs +++ b/ContextMenuManager/BluePointLilac.Methods/SingleInstance.cs @@ -31,12 +31,14 @@ public static bool IsRunning() } } - public static void Restart() + public static void Restart(bool isElevated = false, string[] args = null) { using(Process process = new Process()) { process.StartInfo.FileName = Application.ExecutablePath; process.StartInfo.Arguments = "Restart"; + if(args != null) process.StartInfo.Arguments += string.Join(" ", args); + if(isElevated) process.StartInfo.Verb = "Runas"; process.Start(); } Application.Exit(); diff --git a/ContextMenuManager/ContextMenuManager.csproj b/ContextMenuManager/ContextMenuManager.csproj index 471b8bd..bd0910d 100644 --- a/ContextMenuManager/ContextMenuManager.csproj +++ b/ContextMenuManager/ContextMenuManager.csproj @@ -33,7 +33,7 @@ AnyCPU true full - true + false bin\Debug\ DEBUG;TRACE prompt @@ -93,6 +93,9 @@ + + + Properties\App.manifest @@ -138,6 +141,9 @@ Component + + Component + Component @@ -267,6 +273,9 @@ Component + + Component + Component @@ -338,6 +347,8 @@ + + SettingsSingleFileGenerator diff --git a/ContextMenuManager/Controls/AboutApp.cs b/ContextMenuManager/Controls/AboutApp.cs index d6d8196..018eb19 100644 --- a/ContextMenuManager/Controls/AboutApp.cs +++ b/ContextMenuManager/Controls/AboutApp.cs @@ -17,6 +17,7 @@ public DonateBox() { this.Dock = DockStyle.Fill; this.BackColor = Color.White; + this.AutoScroll = true; this.Font = new Font(SystemFonts.MenuFont.FontFamily, 10F); this.Controls.AddRange(new Control[] { lblInfo, picQR, llbDonationList }); llbDonationList.LinkClicked += (sender, e) => ExternalProgram.OpenUrl(DonateListUrl); @@ -156,7 +157,7 @@ public void LoadTexts() } } - sealed class LanguagesBox : Panel + sealed class LanguagesBox : FlowLayoutPanel { const string OtherLanguagesUrl = "https://github.com/BluePointLilac/ContextMenuManager/tree/master/languages"; @@ -164,12 +165,14 @@ public LanguagesBox() { this.Dock = DockStyle.Fill; this.Font = new Font(SystemFonts.MenuFont.FontFamily, 10F); - this.Controls.AddRange(new Control[] { cmbLanguages, btnOpenDir, llbOtherLanguages, txtTranslators }); - this.OnResize(null); + this.Controls.AddRange(new Control[] { cmbLanguages, btnOpenDir, btnDownLoad, txtTranslators }); cmbLanguages.SelectionChangeCommitted += (sender, e) => ChangeLanguage(); - llbOtherLanguages.LinkClicked += (sender, e) => ExternalProgram.OpenUrl(OtherLanguagesUrl); + btnDownLoad.MouseDown += (sender, e) => ExternalProgram.OpenUrl(OtherLanguagesUrl); btnOpenDir.MouseDown += (sender, e) => ExternalProgram.JumpExplorer(AppConfig.LangsDir); + btnTranslate.MouseDown += (sender, e) => new TranslateDialog().ShowDialog(); MyToolTip.SetToolTip(btnOpenDir, AppString.Tip.OpenLanguagesDir); + MyToolTip.SetToolTip(btnDownLoad, AppString.Tip.OtherLanguages); + this.OnResize(null); } readonly ComboBox cmbLanguages = new ComboBox @@ -178,34 +181,24 @@ public LanguagesBox() DropDownStyle = ComboBoxStyle.DropDownList }; - readonly LinkLabel llbOtherLanguages = new LinkLabel - { - Text = AppString.Other.OtherLanguages, - AutoSize = true - }; - readonly ReadOnlyTextBox txtTranslators = new ReadOnlyTextBox { Multiline = true, ScrollBars = ScrollBars.Vertical }; - readonly PictureButton btnOpenDir = new PictureButton(AppImage.Open); - + readonly PictureButton btnDownLoad = new PictureButton(AppImage.DownLoad); + readonly PictureButton btnTranslate = new PictureButton(AppImage.Translate); readonly List languages = new List(); protected override void OnResize(EventArgs e) { base.OnResize(e); int a = 20.DpiZoom(); - txtTranslators.Left = cmbLanguages.Left = cmbLanguages.Top = llbOtherLanguages.Top = a; - btnOpenDir.Left = cmbLanguages.Right + a; - btnOpenDir.Top = cmbLanguages.Top + (cmbLanguages.Height - btnOpenDir.Height) / 2; - txtTranslators.Top = cmbLanguages.Bottom + a; txtTranslators.Width = this.ClientSize.Width - 2 * a; txtTranslators.Height = this.ClientSize.Height - txtTranslators.Top - a; - txtTranslators.BackColor = this.BackColor; - llbOtherLanguages.Left = txtTranslators.Right - llbOtherLanguages.Width; + cmbLanguages.Margin = txtTranslators.Margin = btnOpenDir.Margin + = btnDownLoad.Margin = btnTranslate.Margin = new Padding(a, a, 0, 0); } public void LoadLanguages() @@ -243,7 +236,7 @@ private void ChangeLanguage() else { AppConfig.Language = language; - SingleInstance.Restart(); + SingleInstance.Restart(true); } } @@ -301,7 +294,7 @@ public AppSettingBox() { DirectoryEx.CopyTo(AppConfig.ConfigDir, newPath); Directory.Delete(AppConfig.ConfigDir, true); - SingleInstance.Restart(); + SingleInstance.Restart(true); } }; cmbEngine.SelectionChangeCommitted += (sender, e) => @@ -337,7 +330,7 @@ public AppSettingBox() if(MessageBoxEx.Show(AppString.MessageBox.RestartApp, MessageBoxButtons.OKCancel) == DialogResult.OK) { AppConfig.ShowFilePath = chkShowFilePath.Checked; - SingleInstance.Restart(); + SingleInstance.Restart(true); } else { @@ -413,7 +406,7 @@ public AppSettingBox() readonly MyListItem mliWinXSortable = new MyListItem { - Text = AppString.Item.WinXSortable, + Text = AppString.Other.WinXSortable, Visible = WindowsOsVersion.ISAfterOrEqual8, HasImage = false }; @@ -421,18 +414,24 @@ public AppSettingBox() readonly MyListItem mliShowFilePath = new MyListItem { - Text = AppString.Item.ShowFilePath, + Text = AppString.Other.ShowFilePath, HasImage = false }; readonly MyCheckBox chkShowFilePath = new MyCheckBox(); readonly MyListItem mliOpenMoreRegedit = new MyListItem { - Text = AppString.Item.OpenMoreRegedit, + Text = AppString.Other.OpenMoreRegedit, HasImage = false }; readonly MyCheckBox chkOpenMoreRegedit = new MyCheckBox(); + protected override void OnVisibleChanged(EventArgs e) + { + base.OnVisibleChanged(e); + this.Enabled = this.Visible; + } + public void LoadItems() { this.AddItems(new[] { mliUpdate, mliConfigDir, mliEngine, mliBackup, diff --git a/ContextMenuManager/Controls/FileExtensionDialog.cs b/ContextMenuManager/Controls/FileExtensionDialog.cs new file mode 100644 index 0000000..dabf32f --- /dev/null +++ b/ContextMenuManager/Controls/FileExtensionDialog.cs @@ -0,0 +1,41 @@ +using BluePointLilac.Methods; +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace ContextMenuManager.Controls +{ + sealed class FileExtensionDialog : SelectDialog + { + public string Extension + { + get => Selected; + set => Selected = value; + } + + public FileExtensionDialog() + { + this.Title = AppString.Dialog.SelectExtension; + this.DropDownStyle = ComboBoxStyle.DropDown; + List items = new List(); + foreach(string keyName in Microsoft.Win32.Registry.ClassesRoot.GetSubKeyNames()) + { + if(keyName.StartsWith(".")) items.Add(keyName.Substring(1)); + } + this.Items = items.ToArray(); + } + + protected override bool RunDialog(IntPtr hwndOwner) + { + bool flag = base.RunDialog(hwndOwner); + if(flag) + { + string extension = ObjectPath.RemoveIllegalChars(this.Extension); + int index = extension.LastIndexOf('.'); + if(index >= 0) this.Extension = extension.Substring(index); + else this.Extension = $".{extension}"; + } + return flag; + } + } +} diff --git a/ContextMenuManager/Controls/GuidBlockedList.cs b/ContextMenuManager/Controls/GuidBlockedList.cs index 4c55e20..74cf3e3 100644 --- a/ContextMenuManager/Controls/GuidBlockedList.cs +++ b/ContextMenuManager/Controls/GuidBlockedList.cs @@ -35,7 +35,7 @@ private void LoadBlockedItems() private void AddNewItem() { - NewItem newItem = new NewItem(AppString.Item.AddGuidBlockedItem); + NewItem newItem = new NewItem(AppString.Other.AddGuidBlockedItem); this.AddItem(newItem); newItem.AddNewItem += (sender, e) => { diff --git a/ContextMenuManager/Controls/NewItem.cs b/ContextMenuManager/Controls/NewItem.cs index 039747d..9671feb 100644 --- a/ContextMenuManager/Controls/NewItem.cs +++ b/ContextMenuManager/Controls/NewItem.cs @@ -6,7 +6,7 @@ namespace ContextMenuManager.Controls { class NewItem : MyListItem { - public NewItem() : this(AppString.Item.NewItem) { } + public NewItem() : this(AppString.Other.NewItem) { } public NewItem(string text) { diff --git a/ContextMenuManager/Controls/NewItemForm.cs b/ContextMenuManager/Controls/NewItemForm.cs index fb65fee..97a8376 100644 --- a/ContextMenuManager/Controls/NewItemForm.cs +++ b/ContextMenuManager/Controls/NewItemForm.cs @@ -12,7 +12,7 @@ public NewItemForm() { this.AcceptButton = btnOk; this.CancelButton = btnCancel; - this.Text = AppString.Item.NewItem; + this.Text = AppString.Other.NewItem; this.Font = SystemFonts.MenuFont; this.MaximizeBox = this.MinimizeBox = false; this.ShowIcon = this.ShowInTaskbar = false; diff --git a/ContextMenuManager/Controls/RuleItem.cs b/ContextMenuManager/Controls/RuleItem.cs index f7f2871..d93bbe6 100644 --- a/ContextMenuManager/Controls/RuleItem.cs +++ b/ContextMenuManager/Controls/RuleItem.cs @@ -160,7 +160,7 @@ public bool ItemVisible }, ItemInfo = new ItemInfo { - Text = AppString.Item.CustomFolder, + Text = AppString.Other.CustomFolder, Image = AppImage.Folder, Tip = AppString.Tip.CustomFolder, RestartExplorer = true @@ -175,7 +175,7 @@ public bool ItemVisible }, ItemInfo = new ItemInfo { - Text = $"{AppString.Item.MapNetworkDrive} && {AppString.Item.DisconnectNetworkDrive}", + Text = $"{AppString.Other.MapNetworkDrive} && {AppString.Other.DisconnectNetworkDrive}", Image = AppImage.NetworkDrive, RestartExplorer = true } @@ -189,7 +189,7 @@ public bool ItemVisible }, ItemInfo = new ItemInfo { - Text = AppString.Item.RecycleBinProperties, + Text = AppString.Other.RecycleBinProperties, Image = AppImage.RecycleBin, RestartExplorer = true } @@ -203,7 +203,7 @@ public bool ItemVisible }, ItemInfo = new ItemInfo { - Text = AppString.Item.RemovableDrive, + Text = AppString.Other.RemovableDrive, Image = AppImage.Drive, Tip = AppString.Tip.SendToDrive, RestartExplorer = true @@ -218,7 +218,7 @@ public bool ItemVisible }, ItemInfo = new ItemInfo { - Text = AppString.Item.BuildSendtoMenu, + Text = AppString.Other.BuildSendtoMenu, Image = AppImage.SendTo, Tip = AppString.Tip.BuildSendtoMenu } @@ -232,7 +232,7 @@ public bool ItemVisible }, ItemInfo = new ItemInfo { - Text = AppString.Item.UseStoreOpenWith, + Text = AppString.Other.UseStoreOpenWith, Image = AppImage.MicrosoftStore } }; diff --git a/ContextMenuManager/Controls/SelectDialog.cs b/ContextMenuManager/Controls/SelectDialog.cs index ea83194..6c58568 100644 --- a/ContextMenuManager/Controls/SelectDialog.cs +++ b/ContextMenuManager/Controls/SelectDialog.cs @@ -1,6 +1,5 @@ using BluePointLilac.Methods; using System; -using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; @@ -110,38 +109,4 @@ private void InitializeComponents() } } } - - sealed class FileExtensionDialog : SelectDialog - { - public string Extension - { - get => Selected; - set => Selected = value; - } - - public FileExtensionDialog() - { - this.Title = AppString.Item.SelectExtension; - this.DropDownStyle = ComboBoxStyle.DropDown; - List items = new List(); - foreach(string keyName in Microsoft.Win32.Registry.ClassesRoot.GetSubKeyNames()) - { - if(keyName.StartsWith(".")) items.Add(keyName.Substring(1)); - } - this.Items = items.ToArray(); - } - - protected override bool RunDialog(IntPtr hwndOwner) - { - bool flag = base.RunDialog(hwndOwner); - if(flag) - { - string extension = ObjectPath.RemoveIllegalChars(this.Extension); - int index = extension.LastIndexOf('.'); - if(index >= 0) this.Extension = extension.Substring(index); - else this.Extension = $".{extension}"; - } - return flag; - } - } } \ No newline at end of file diff --git a/ContextMenuManager/Controls/ShellItem.cs b/ContextMenuManager/Controls/ShellItem.cs index 58ca6a3..d24730a 100644 --- a/ContextMenuManager/Controls/ShellItem.cs +++ b/ContextMenuManager/Controls/ShellItem.cs @@ -91,10 +91,10 @@ class ShellItem : MyListItem, IChkVisibleItem, IBtnShowMenuItem, ITsiTextItem, I /// Shell类型菜单特殊注册表项名默认名称 private static readonly Dictionary DefaultNames = new Dictionary(StringComparer.OrdinalIgnoreCase) { - {"open", AppString.Item.Open }, {"edit", AppString.Item.Edit }, {"print", AppString.Item.Print }, - {"find", AppString.Item.Find }, {"play", AppString.Item.Play }, {"runas", AppString.Item.Runas }, + {"open", AppString.Other.Open }, {"edit", AppString.Other.Edit }, {"print", AppString.Other.Print }, + {"find", AppString.Other.Find }, {"play", AppString.Other.Play }, {"runas", AppString.Other.Runas }, //Win10为“浏览(&X)”,Win10之前为“资源管理器(&X)” - {"explore", WindowsOsVersion.IsBefore10 ? AppString.Item.ExploreOld : AppString.Item.Explore } + {"explore", WindowsOsVersion.IsBefore10 ? AppString.Other.ExploreOld : AppString.Other.Explore } }; /// 菜单项目在菜单中出现的位置 @@ -274,6 +274,10 @@ void DeleteSomeValues() else { if(TryProtectOpenItem()) return; + if(WindowsOsVersion.IsAfterOrEqualWin10_1703) + { + Registry.SetValue(RegPath, "HideBasedOnVelocityId", 0x639bc8); + } if(!IsSubItem) { //当LegaryDisable键值作用于文件夹-"在新窗口中打开"时 @@ -284,15 +288,11 @@ void DeleteSomeValues() } Registry.SetValue(RegPath, "ProgrammaticAccessOnly", ""); } - if(WindowsOsVersion.IsAfterOrEqualWin10_1703) - { - Registry.SetValue(RegPath, "HideBasedOnVelocityId", 0x639bc8); - if(ShowAsDisabledIfHidden) DeleteSomeValues(); - } else { MessageBoxEx.Show(AppString.MessageBox.CannotHideSubItem); } + if(ShowAsDisabledIfHidden) DeleteSomeValues(); } } catch @@ -577,7 +577,7 @@ private void ShowSubItems() } using(ShellSubMenuDialog dlg = new ShellSubMenuDialog()) { - dlg.Text = AppString.Item.EditSubItems.Replace("%s", this.Text); + dlg.Text = AppString.Other.EditSubItems.Replace("%s", this.Text); dlg.Icon = ResourceIcon.GetIcon(IconPath, IconIndex); dlg.ShowDialog(this.RegPath); } diff --git a/ContextMenuManager/Controls/ShellList.cs b/ContextMenuManager/Controls/ShellList.cs index 172c29f..e1ece63 100644 --- a/ContextMenuManager/Controls/ShellList.cs +++ b/ContextMenuManager/Controls/ShellList.cs @@ -457,29 +457,29 @@ private string GetText(Scenes scene) case Scenes.CustomExtension: if(CurrentExtension == null) { - return AppString.Item.SelectExtension; + return AppString.Dialog.SelectExtension; } else { - return AppString.Item.CurrentExtension.Replace("%s", CurrentExtension); + return AppString.Other.CurrentExtension.Replace("%s", CurrentExtension); } case Scenes.PerceivedType: if(CurrentPerceivedType == null) { - return AppString.Item.SelectPerceivedType; + return AppString.Dialog.SelectPerceivedType; } else { - return AppString.Item.CurrentPerceivedType.Replace("%s", GetPerceivedTypeName()); + return AppString.Other.CurrentPerceivedType.Replace("%s", GetPerceivedTypeName()); } case Scenes.DirectoryType: if(CurrentDirectoryType == null) { - return AppString.Item.SelectDirectoryType; + return AppString.Dialog.SelectDirectoryType; } else { - return AppString.Item.CurrentDirectoryType.Replace("%s", GetDirectoryTypeName()); + return AppString.Other.CurrentDirectoryType.Replace("%s", GetDirectoryTypeName()); } default: return null; @@ -501,7 +501,7 @@ private void Select(Scenes scene) dlg = new SelectDialog { Items = PerceivedTypeNames, - Title = AppString.Item.SelectPerceivedType, + Title = AppString.Dialog.SelectPerceivedType, Selected = GetPerceivedTypeName() ?? PerceivedTypeNames[0] }; break; @@ -509,7 +509,7 @@ private void Select(Scenes scene) dlg = new SelectDialog { Items = DirectoryTypeNames, - Title = AppString.Item.SelectDirectoryType, + Title = AppString.Dialog.SelectDirectoryType, Selected = GetDirectoryTypeName() ?? DirectoryTypeNames[0] }; break; diff --git a/ContextMenuManager/Controls/ShellNewList.cs b/ContextMenuManager/Controls/ShellNewList.cs index c732acc..27e5f66 100644 --- a/ContextMenuManager/Controls/ShellNewList.cs +++ b/ContextMenuManager/Controls/ShellNewList.cs @@ -188,7 +188,7 @@ public ShellNewLockItem(ShellNewList list) { this.Owner = list; this.Image = AppImage.Lock; - this.Text = AppString.Item.LockNewMenu; + this.Text = AppString.Other.LockNewMenu; this.SetNoClickEvent(); BtnShowMenu = new MenuButton(this); ChkVisible = new VisibleCheckBox(this) { Checked = IsLocked }; @@ -276,7 +276,7 @@ sealed class ShellNewSeparator : MyListItem { public ShellNewSeparator() { - this.Text = AppString.Item.Separator; + this.Text = AppString.Other.Separator; this.HasImage = false; } } diff --git a/ContextMenuManager/Controls/ShellSubMenuDialog.cs b/ContextMenuManager/Controls/ShellSubMenuDialog.cs index 8d1f8a5..45615e6 100644 --- a/ContextMenuManager/Controls/ShellSubMenuDialog.cs +++ b/ContextMenuManager/Controls/ShellSubMenuDialog.cs @@ -326,7 +326,7 @@ sealed class InvalidItem : MyListItem, IBtnDeleteItem, IBtnMoveUpDownItem public InvalidItem(PulicMultiItemsList list, string keyName) { this.Owner = list; - this.Text = $"{AppString.Item.InvalidItem} {keyName}"; + this.Text = $"{AppString.Other.InvalidItem} {keyName}"; this.Image = AppImage.NotFound.ToTransparent(); BtnDelete = new DeleteButton(this); BtnMoveDown = new MoveButton(this, false); @@ -558,7 +558,7 @@ class SubSeparatorItem : MyListItem, IBtnDeleteItem, IBtnMoveUpDownItem { public SubSeparatorItem() { - this.Text = AppString.Item.Separator; + this.Text = AppString.Other.Separator; this.HasImage = false; BtnDelete = new DeleteButton(this); BtnMoveDown = new MoveButton(this, false); diff --git a/ContextMenuManager/Controls/TranslateDialog.cs b/ContextMenuManager/Controls/TranslateDialog.cs new file mode 100644 index 0000000..ff5df1c --- /dev/null +++ b/ContextMenuManager/Controls/TranslateDialog.cs @@ -0,0 +1,56 @@ +using BluePointLilac.Methods; +using System; +using System.Drawing; +using System.Linq; +using System.Windows.Forms; + +namespace ContextMenuManager.Controls +{ + sealed class TranslateDialog : CommonDialog + { + public override void Reset() { } + + protected override bool RunDialog(IntPtr hwndOwner) + { + using(TranslateForm frm = new TranslateForm()) + { + bool flag = frm.ShowDialog() == DialogResult.OK; + return flag; + } + } + + sealed class TranslateForm : Form + { + public TranslateForm() + { + this.ShowIcon = this.ShowInTaskbar = false; + this.MaximizeBox = this.MinimizeBox = false; + this.SizeGripStyle = SizeGripStyle.Hide; + this.StartPosition = FormStartPosition.CenterParent; + this.Font = new Font(SystemFonts.MessageBoxFont.FontFamily, 10F); + cmbSections.Width = cmbKeys.Width = 200.DpiZoom(); + cmbSections.Left = cmbSections.Top = cmbKeys.Top = 20.DpiZoom(); + cmbKeys.Left = cmbSections.Right + 20.DpiZoom(); + this.Width = cmbKeys.Right + 20.DpiZoom(); + this.Controls.AddRange(new Control[] { cmbSections, cmbKeys }); + cmbSections.Items.AddRange(AppString.DefaultLanguage.RootDic.Keys.ToArray()); + cmbSections.SelectedIndexChanged += (sender, e) => + { + cmbKeys.Items.Clear(); + cmbKeys.Items.AddRange(AppString.DefaultLanguage.RootDic[cmbSections.Text].Keys.ToArray()); + cmbKeys.SelectedIndex = 0; + }; + cmbSections.SelectedIndex = 0; + } + + readonly ComboBox cmbSections = new ComboBox + { + DropDownStyle = ComboBoxStyle.DropDownList + }; + readonly ComboBox cmbKeys = new ComboBox + { + DropDownStyle = ComboBoxStyle.DropDownList + }; + } + } +} \ No newline at end of file diff --git a/ContextMenuManager/Program.cs b/ContextMenuManager/Program.cs index eadefc4..92d738b 100644 --- a/ContextMenuManager/Program.cs +++ b/ContextMenuManager/Program.cs @@ -15,11 +15,13 @@ static class Program [STAThread] static void Main(string[] args) { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + bool isRestart = args.Length > 0 && args[0] == "Restart"; if(!isRestart && SingleInstance.IsRunning()) return; + Updater.PeriodicUpdate(); - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); } } diff --git a/ContextMenuManager/Properties/App.manifest b/ContextMenuManager/Properties/App.manifest index d3320e7..d09a046 100644 --- a/ContextMenuManager/Properties/App.manifest +++ b/ContextMenuManager/Properties/App.manifest @@ -1,20 +1,20 @@  - + - + - - + + - + diff --git a/ContextMenuManager/Properties/Resources.Designer.cs b/ContextMenuManager/Properties/Resources.Designer.cs index e0fa7b8..985ac0c 100644 --- a/ContextMenuManager/Properties/Resources.Designer.cs +++ b/ContextMenuManager/Properties/Resources.Designer.cs @@ -164,6 +164,16 @@ internal static System.Drawing.Bitmap Donate { } } + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap DownLoad { + get { + object obj = ResourceManager.GetObject("DownLoad", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// 查找类似 <?xml version='1.0' encoding='utf-8' ?> ///<!--此文件为常用右键菜单字典, @@ -347,6 +357,16 @@ internal static string ThirdRulesDic { } } + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap Translate { + get { + object obj = ResourceManager.GetObject("Translate", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// diff --git a/ContextMenuManager/Properties/Resources.resx b/ContextMenuManager/Properties/Resources.resx index b947030..2245be9 100644 --- a/ContextMenuManager/Properties/Resources.resx +++ b/ContextMenuManager/Properties/Resources.resx @@ -142,6 +142,9 @@ resources\images\donate.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + resources\images\download.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + resources\texts\enhancemenusdic.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 @@ -187,6 +190,9 @@ resources\texts\thirdrulesdic.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + resources\images\translate.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + resources\images\turnoff.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/ContextMenuManager/Properties/Resources/Images/DownLoad.png b/ContextMenuManager/Properties/Resources/Images/DownLoad.png new file mode 100644 index 0000000..9ac5d64 Binary files /dev/null and b/ContextMenuManager/Properties/Resources/Images/DownLoad.png differ diff --git a/ContextMenuManager/Properties/Resources/Images/Translate.png b/ContextMenuManager/Properties/Resources/Images/Translate.png new file mode 100644 index 0000000..56bd6db Binary files /dev/null and b/ContextMenuManager/Properties/Resources/Images/Translate.png differ diff --git a/ContextMenuManager/Properties/Resources/Texts/AppLanguageDic.ini b/ContextMenuManager/Properties/Resources/Texts/AppLanguageDic.ini index 0549241..78654d4 100644 --- a/ContextMenuManager/Properties/Resources/Texts/AppLanguageDic.ini +++ b/ContextMenuManager/Properties/Resources/Texts/AppLanguageDic.ini @@ -46,6 +46,7 @@ DragDrop = 右键拖拽 PublicReferences = 公共引用 GuidBlocked = GUID 锁 IEMenu = IE 右键 + AppSetting = 程序设置 AppLanguage = 程序语言 Dictionaries = 程序字典 @@ -121,38 +122,6 @@ RestoreDefault = 还原默认 Edit = 编辑 Save = 保存 -[Item] -Open = 打开(&O) -Edit = 编辑(&E) -Explore = 浏览(&X) -ExploreOld = 资源管理器(&X) -Play = 播放(&L) -Print = 打印(&P) -Find = 搜索(&E)... -Runas = 以管理员身份运行(&A) -CustomFolder = 自定义文件夹(&F)... -MapNetworkDrive = 映射网络驱动器(&N)... -DisconnectNetworkDrive = 断开网络驱动器的连接(&C)... -RecycleBinProperties = 属性(&R) -RemovableDrive = 可移动磁盘 -BuildSendtoMenu = 快速构建发送到子菜单 -UseStoreOpenWith = 在Microsoft Store中查找应用 -NewItem = 新建一个菜单项目 -AddGuidBlockedItem = 添加GUID锁定项目 -LockNewMenu = 锁定新建菜单 -EditSubItems = 编辑 "%s" 的子菜单项目 -InvalidItem = 无效菜单项目: -Separator = >>>>>> 分割线 <<<<<< -SelectExtension = 请选择一个文件扩展名 -SelectPerceivedType = 请选择一个文件感知类型 -SelectDirectoryType = 请选择一个目录感知类型 -CurrentExtension = 你当前选择的文件扩展名为 %s -CurrentPerceivedType = 你当前选择的文件感知类型为 %s -CurrentDirectoryType = 你当前选择的目录感知类型为 %s -WinXSortable = 启用 WinX 菜单排序功能 -ShowFilePath = 状态栏实时显示文件路径 -OpenMoreRegedit = 允许注册表编辑器多开 - [Dialog] Ok = 确认 Cancel = 取消 @@ -184,6 +153,9 @@ VideoDirectory = 视频目录 AudioDirectory = 音频目录 CheckReference = 请勾选你想要引用的菜单项目 CheckCopy = 请勾选你想要复制的菜单项目 +SelectExtension = 请选择一个文件扩展名 +SelectPerceivedType = 请选择一个文件感知类型 +SelectDirectoryType = 请选择一个目录感知类型 SelectGroup = 请选择保存分组 SelectNewItemType = 请选择新建菜单类型 SelectSubMenuMode = 该多级菜单子项目数为0, 你有两个选择:\n①该多级菜单的所有子菜单项目私有(推荐),\n②该多级菜单可与其他多级菜单引用相同子项,\n请做出你的选择...... @@ -234,17 +206,45 @@ LockNewMenu = 启用后可阻止第三方程序增加项目\n且可对现有项 CheckUpdate = 程序每月自动检测一次更新 (启动程序时)\n你可手动点击浏览Github、Gitee检查更新 LastCheckUpdateTime = 上次自动更新检查时间: OpenLanguagesDir = 打开语言文件夹 +OtherLanguages = 下载或上传其他语言文件 OpenDictionariesDir = 打开字典文件夹 ConfigPath = 更改配置和数据文件保存路径后,\n会导致部分已启用增强菜单失效,\n可在增强菜单中重新启用一遍 CommandFiles = 此命令依赖配置文件,移动配置文件位置\n会导致此菜单项失效,重新启用一遍即可 CreateGroup = 新建一个分组 [Other] +Open = 打开(&O) +Edit = 编辑(&E) +Explore = 浏览(&X) +ExploreOld = 资源管理器(&X) +Play = 播放(&L) +Print = 打印(&P) +Find = 搜索(&E)... +Runas = 以管理员身份运行(&A) +CustomFolder = 自定义文件夹(&F)... +MapNetworkDrive = 映射网络驱动器(&N)... +DisconnectNetworkDrive = 断开网络驱动器的连接(&C)... +RecycleBinProperties = 属性(&R) +RemovableDrive = 可移动磁盘 +BuildSendtoMenu = 快速构建发送到子菜单 +UseStoreOpenWith = 在Microsoft Store中查找应用 +NewItem = 新建一个菜单项目 +AddGuidBlockedItem = 添加GUID锁定项目 +LockNewMenu = 锁定新建菜单 +EditSubItems = 编辑 "%s" 的子菜单项目 +InvalidItem = 无效菜单项目: +Separator = >>>>>> 分割线 <<<<<< +CurrentExtension = 你当前选择的文件扩展名为 %s +CurrentPerceivedType = 你当前选择的文件感知类型为 %s +CurrentDirectoryType = 你当前选择的目录感知类型为 %s +WinXSortable = 启用 WinX 菜单排序功能 +ShowFilePath = 状态栏实时显示文件路径 +OpenMoreRegedit = 允许注册表编辑器多开 RestartExplorer = 当前部分操作需要重启文件资源管理器生效 + DictionaryDescription = 字典说明 GuidInfosDictionary = GUID信息 Translators = 翻译贡献者 -OtherLanguages = 下载或上传其他语言文件 DonationList = 捐赠名单 ConfigPath = 配置和数据文件保存位置 AppDataDir = AppData 目录 diff --git a/ContextMenuManager/Updater.cs b/ContextMenuManager/Updater.cs index c87560a..ef207e4 100644 --- a/ContextMenuManager/Updater.cs +++ b/ContextMenuManager/Updater.cs @@ -20,13 +20,13 @@ public static void PeriodicUpdate() Version appVersion = new Version(Application.ProductVersion); //如果上次检测更新时间为一个月以前就进行更新操作 bool flag1 = AppConfig.LastCheckUpdateTime.AddMonths(1).CompareTo(DateTime.Today) < 0; - //如果配置文件中的版本号低于程序版本号也进行更新操作 - bool flag2 = appVersion.CompareTo(AppConfig.Version) > 0; + //如果配置文件中的版本号与程序版本号不同也进行更新操作 + bool flag2 = appVersion.CompareTo(AppConfig.Version) != 0; if(flag1 || flag2) { CheckUpdate(); - AppConfig.LastCheckUpdateTime = DateTime.Today; AppConfig.Version = appVersion; + AppConfig.LastCheckUpdateTime = DateTime.Today; } } diff --git a/Donate.md b/Donate.md index 4e4eb80..287d128 100644 --- a/Donate.md +++ b/Donate.md @@ -8,9 +8,9 @@ ## 捐赠名单 -> 此名单不定期更新(上次更新:**2021-03-05**) +> 此名单不定期更新(上次更新:**2021-03-10**) -> 累计金额:**280.22** 元,累计人次:**54** 人次 +> 累计金额:**286.88** 元,累计人次:**55** 人次 |日期|用户ID|平台|金额|备注 |:--:|:--:|:--:|:--:|:--: @@ -68,4 +68,5 @@ |2020-02-28|*奇|微信|10| |2020-03-02|*瑜|微信|3| |2020-03-04|**方|支付宝|2| -|2020-03-05|*科|支付宝|1| \ No newline at end of file +|2020-03-05|*科|支付宝|1| +|2020-03-10|*y|微信|6.66| \ No newline at end of file diff --git a/languages/en-US.ini b/languages/en-US.ini index f706eed..661f398 100644 --- a/languages/en-US.ini +++ b/languages/en-US.ini @@ -10,7 +10,7 @@ AppName = Windows Context Menu Manager [ToolBar] Home = Home -Type = File Type Rules +Type = File Types Rule = Other Rules Refresh = Refresh About = About @@ -32,8 +32,8 @@ OpenWith = Open with WinX = Win+X LnkFile = .lnk file -UwpLnk = UWP .lnk files -ExeFile = .exe +UwpLnk = UWP .lnk +ExeFile = .exe files TextFile = Text file ImageFile = Image file @@ -142,43 +142,8 @@ RestoreDefault = Restore default Edit = Edit Save = Save -[Item] -Open = Open (& O) -Edit = Edit (& E) -Explore = Explorer (& X) -Play = Play (& L) -Print = Print (& P) -Find = Find (& E) ... -Runas = Run as administrator (& A) -CustomFolder = Customize this folder (& F) ... -MapNetworkDrive = Map Network Drive (& N) ... -DisconnectNetworkDrive = Disconnect Network Drive (& C) ... -RecycleBinProperties = Properties (& R) -RemovableDrive = Removable Disk -BuildSendtoMenu = Create "Send to" submenu -UseStoreOpenWith = Find apps in Microsoft Store -ShareWithSkype = Share using Skype -NewItem = Create new menu item -AddGuidBlockedItem = Add GUID blocked item - -CurrentExtension = The currently selected file type is - -LockNewMenu = Lock the new menu -EditSubItems = Edit sub-menu items for "% s" -InvalidItem = Invalid menu item: -Separator = ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ -SelectExtension = Please select a file extension -SelectPerceivedType = Please select a perceived file type -SelectDirectoryType = Please select a perceived folder type -CurrentExtension = The currently selected file extension is %s -CurrentPerceivedType = The currently selected perceived file type is %s -CurrentDirectoryType = The currently selected perceived folder type is %s -WinXSortable = Enable WinX menu sorting function -ShowFilePath = Show file path of item in status bar on hover -OpenMoreRegedit = Allow the registry editor to open more - [Dialog] -Ok = Confirm +Ok = OK Cancel = Cancel Browse = Browse Program = Program @@ -214,12 +179,12 @@ DocumentDirectory = Document folder ImageDirectory = Image folder VideoDirectory = Video folder AudioDirectory = Audio folder - CheckReference = Check the menu item to which you want to add a reference to - CheckCommon = Check the common menu items you want to add - CheckCopy = Check the menu item you want to copy +SelectExtension = Please select a file extension +SelectPerceivedType = Please select a perceived file type +SelectDirectoryType = Please select a perceived folder type SelectGroup = Select to save the group SelectSubMenuMode = The number of sub-items in the current multi-level menu is 0. There are two choices:\n① All sub-menu items in this multi-level menu are private (recommended),\n② The multi-level menu can reference the same sub-items as other multi-level menus.\nDemanding choice... @@ -240,7 +205,6 @@ NoOpenModeExtension = There is no app associated with this extension.\nRight-cli CannotChangePath = File path changes are not allowed! CopiedToClipboard = Copy to clipboard: MalformedGuid = GUID with incorrect format - UnknownGuid = Unknown GUID! HasBeenAdded = This item has been added! @@ -278,12 +242,38 @@ LockNewMenu = Once enabled, it can prevent third-party programs from adding item CheckUpdate = The program automatically looks for updates once a month (when the program is started)\nYou can manually click to browse Github, Gitee to check for updates LastCheckUpdateTime = Last automatic update check time: OpenLanguagesDir = Open language folder +OtherLanguages ​​= Download or upload files in other languages OpenDictionariesDir = Open dictionary folder ConfigPath = After changing the configuration and data file save path,\nsome of the enhanced menus that have been enabled will become invalid.\nThey can be re-enabled in the enhanced menu CommandFiles = This command depends on the configuration file. Moving the configuration file location will cause this menu item to become invalid. Re-enable it. CreateGroup = Create a new group [Other] +Open = &Open +Edit = &Edit +Explore = E&xplorer +Play = P&lay +Print = &Print +Find = Find(&E)... +Runas = Run as &administrator +CustomFolder = Customize this &folder... +MapNetworkDrive = Map &Network Drive... +DisconnectNetworkDrive = Disconnect Network Drive(&C) ... +RecycleBinProperties = Properties(&R) +RemovableDrive = Removable Disk +BuildSendtoMenu = Create "Send to" submenu +UseStoreOpenWith = Find apps in Microsoft Store +ShareWithSkype = Share using Skype +NewItem = Create new menu item +AddGuidBlockedItem = Add GUID blocked item +CurrentExtension = The currently selected file type is +LockNewMenu = Lock the new menu +EditSubItems = Edit sub-menu items for "% s" +InvalidItem = Invalid menu item: +Separator = >>>>>> Separator <<<<<< +CurrentExtension = The currently selected file extension is %s +CurrentPerceivedType = The currently selected perceived file type is %s +CurrentDirectoryType = The currently selected perceived folder type is %s RestartExplorer = Explorer must be restarted for the changes to take effect. DictionaryDescription = Dictionary description LanguageDictionary = Language @@ -291,7 +281,6 @@ GuidInfosDictionary = GUID information ThridRulesDictionary = Third-party rules CommonItemsDictionary = Common Menu Translators = Translators -OtherLanguages ​​= Download or upload files in other languages DonationList = Donation list ConfigPath = Save location of configuration and data files @@ -306,9 +295,12 @@ ProtectOpenItem = Protect the "Open" menu item WebSearchEngine = Search engine used for web searches CustomEngine = Custom SetCustomEngine = Define search engine (use %s instead of search keywords) +WinXSortable = Enable WinX menu sorting function +ShowFilePath = Show file path of item in status bar on hover +OpenMoreRegedit = Allow the registry editor to open more AboutApp = [Main function]\n 1. Manage common location context menu\n 2. Customize and add context menu\n\n[Compatibility]\n 1. Suitable for Win7, 8, 8.1, 10, Vista\n 2. Suitable For x64, x32 CPU operating system\n 3. Adapt to high resolution screens, the best zoom ratio is 150%\n\n[Open source code]\n 1. Code language: C#, Winform program\n 2. GitHub project: https://github.com/BluePointLilac/ContextMenuManager\n 3. Gitee project: https://gitee.com/BluePointLilac/ContextMenuManager\n\n[Contact Author]\n 1. The program is developed by myself, yet I of course also want to thank Meng Yanshe @ Kengchen for answering questions in normal times, since my ability for this is limited.\n There are inevitably some bugs, and everyone is welcome to leave feedback and make suggestions\n 2. Personal B station: https://space.bilibili.com/34492771 (I welcome everyone to follow me!)\n 3. QQ mailbox: 1617859183@qq.com\n\n[Resource Reference]\n 1. The main program icon comes from: https://www.easyicon.net/1208132-mouse_icon.html\n 2. Program button icons are mainly from the Alibaba vector icon library: https://www.iconfont.cn/\n 3. WinX HashLnk (Rafael Rivera): https://github.com/riverar/hashlnk\n\n[Program update]\n 1. The program has a check and update function. In addition to updating the program itself, it also updates the dictionary. After the download is complete, you can directly overwrite the original file.\n 2. Because GitHub Raw is walled and Gitee Raw has a monthly access limit, the program is set to check for updates once a month.\n You can also browse the GitHub Releases column or the Gitee release column to check if there are updates\n\n[Warm Tips]\n 1. Some special menu items may be affected by other factors, they will not be displayed in the context menu.\n However, they will still be displayed as enabled in this program according to the general rules used by the program. This is normal.\n 2. The method of disabling the menu for each context menu management program may be different. It is recommended not to use multiple context menu management programs at the same time.\n Most programs use a simple and violent backup-delete method. This program uses the key values ​​provided by the system to hide operations as much as possible.\n If you have used other programs to disable the menu item before, please use the corresponding program to restore it, otherwise you may not be able to see it in this program.\n 3. This program is not used to clean up programs that have not been uninstalled, but it can help you locate the registry and file locations of the menu items.\n You can perform your operations according to the relevant content. If you are a computer novice, you are recommended to only touch the enable\disable switch. Dictionaries = [Dictionary description]\n This program has several dictionary files, and each dictionary has a user dictionary and a network dictionary.\n If you want to add a dictionary to this program, you can right-click to save the file and follow the instructions in the file to add it.\n Send your dictionary to my email or submit it to GitHub to make your contribution to this project.\n The right tab is the original dictionary content, you can switch the tab to view it\n\n[Dictionary content]\n 1. Program display text language dictionary (Languages directory)\n 2. ShellEx menu item GUID text icon dictionary (GuidInfosDic.ini)\n 3. Third-party program menu internal setting dictionary (ThirdRulesDic.xml)\n 4. Enhanced menu items Dictionary (EnhanceMenusDic.xml) -Donate = This program is completely free. If you find this software helpful, you can donate by scanning the QR code below\n (WeChat, Alipay, Tencent QQ). The amount is up to you. Thank you for your support! \nI also hope you consider starring this program's project on Github or Gitee (this means a lot to me!) +Donate = This program is completely free. If you find this software helpful,\nyou can donate by scanning the QR code below (WeChat, Alipay, Tencent QQ).\nThe amount is up to you. Thank you for your support! I also hope you consider \nstarring this program's project on Github or Gitee (this means a lot to me!). \ No newline at end of file diff --git a/languages/ja-JP.ini b/languages/ja-JP.ini index 3bf4b75..b2702fd 100644 --- a/languages/ja-JP.ini +++ b/languages/ja-JP.ini @@ -12,6 +12,7 @@ AppName = Windows右ボタン管理 Home = ホーム Type = ファイルタイプ Rule = 他のルール +Refresh = リフレッシュ About = ヘルプ [SideBar] @@ -33,15 +34,8 @@ WinX = Win+X LnkFile = lnkファイル UwpLnk = uwp lnk ExeFile = アプリケーション -TextFile = テキストファイル -ImageFile = イメージファイル -VideoFile = ビデオファイル -AudioFile = オーディオファイル -ImageDirectory = イメージディレクトリ -VideoDirectory = ビデオディレクトリ -AudioDirectory = オーディオディレクトリ UnknownType = 不明な形式 -CustomType = カスタムフォーマット +CustomExtension = カスタムフォーマット GuidBlocked = GUIDロック ThirdRules = 第三者のルール @@ -111,28 +105,6 @@ InitialData = 初期データ Edit = 編集 Save = 保存 -[Item] -Open = 開く(&O) -Edit = 編集(&E) -Explore = エクスプローラー(&X) -Play = 再生(&L) -Print = 印刷(&P) -Find = 検索(&E)... -Runas = 管理者として実行(&A) -CustomFolder = このフォルダーのカスタマイズ(&F)... -MapNetworkDrive = ネットワークドライブの割り当て(&N)... -DisconnectNetworkDrive = ネットワークドライブの切断(&C)... -RecycleBinProperties = プロパティ(&R) -RemovableDrive = リムーバブルディスク -BuildSendtoMenu = 「送る」サブメニューを作成 -UseStoreOpenWith = Microsoft Storeでアプリを探す -NewItem = 新しいメニュー項目を作成 -AddGuidBlockedItem = GUIDロックアイテムを追加 -CurrentExtension = 現在選択しているファイル形式は -EditSubItems = 「%s」のサブメニュー項目を編集 -InvalidItem = 無効なメニュー項目: -Separator = ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ - [Dialog] Ok = 確認 Cancel = キャンセル @@ -146,9 +118,16 @@ ItemCommand = 菜アイテムコマンド SingleMenu = シングルメニュー MultiMenu = マルチメニュー InputGuid = ガイドを入力 -SelectExtension = ファイル拡張子を選択してください +TextFile = テキストファイル +ImageFile = イメージファイル +VideoFile = ビデオファイル +AudioFile = オーディオファイル +ImageDirectory = イメージディレクトリ +VideoDirectory = ビデオディレクトリ +AudioDirectory = オーディオディレクトリ CheckReference = 引用を追加したいメニュー項目をチェックしてください CheckCommon = 追加したい一般的なメニュー項目を確認してください +SelectExtension = ファイル拡張子を選択してください SelectSubMenuMode = 当現在のマルチレベルメニューのサブ項目数は0です。二つの選択肢がある:\n①このマルチレベルメニューのすべてのサブメニュー項目はプライベートですが、\n②このマルチレベルメニューは、他のマルチレベルメニューと同じサブアイテムを参照できます、\n選択してください。 [MessageBox] @@ -184,15 +163,35 @@ AddExistingItems = 既存のプロジェクトへの参照を追加 AddSeparator = 仕切りを追加 Separator = プロジェクトの分割線 AddCommonItems =よく使うメニュー項目を追加 +OtherLanguages = 他の言語でファイルをダウンロードまたはアップロードする [Other] +Open = 開く(&O) +Edit = 編集(&E) +Explore = エクスプローラー(&X) +Play = 再生(&L) +Print = 印刷(&P) +Find = 検索(&E)... +Runas = 管理者として実行(&A) +CustomFolder = このフォルダーのカスタマイズ(&F)... +MapNetworkDrive = ネットワークドライブの割り当て(&N)... +DisconnectNetworkDrive = ネットワークドライブの切断(&C)... +RecycleBinProperties = プロパティ(&R) +RemovableDrive = リムーバブルディスク +BuildSendtoMenu = 「送る」サブメニューを作成 +UseStoreOpenWith = Microsoft Storeでアプリを探す +NewItem = 新しいメニュー項目を作成 +AddGuidBlockedItem = GUIDロックアイテムを追加 +CurrentExtension = 現在選択しているファイル形式は +EditSubItems = 「%s」のサブメニュー項目を編集 +InvalidItem = 無効なメニュー項目: +Separator = >>>>>> プロジェクトの分割線 <<<<<< DictionaryDescription = 辞書説明 LanguageDictionary = Language GuidInfosDictionary = GUID情報 ThridRulesDictionary = 第三者のルール CommonItemsDictionary = 一般メニュー Translators = 翻訳者 -OtherLanguages = 他の言語でファイルをダウンロードまたはアップロードする RestartExplorer = 現在の一部の操作を有効にするには、ファイルエクスプローラーを再起動する必要があります AboutApp = diff --git a/languages/zh-CN.ini b/languages/zh-CN.ini index 0549241..78654d4 100644 --- a/languages/zh-CN.ini +++ b/languages/zh-CN.ini @@ -46,6 +46,7 @@ DragDrop = 右键拖拽 PublicReferences = 公共引用 GuidBlocked = GUID 锁 IEMenu = IE 右键 + AppSetting = 程序设置 AppLanguage = 程序语言 Dictionaries = 程序字典 @@ -121,38 +122,6 @@ RestoreDefault = 还原默认 Edit = 编辑 Save = 保存 -[Item] -Open = 打开(&O) -Edit = 编辑(&E) -Explore = 浏览(&X) -ExploreOld = 资源管理器(&X) -Play = 播放(&L) -Print = 打印(&P) -Find = 搜索(&E)... -Runas = 以管理员身份运行(&A) -CustomFolder = 自定义文件夹(&F)... -MapNetworkDrive = 映射网络驱动器(&N)... -DisconnectNetworkDrive = 断开网络驱动器的连接(&C)... -RecycleBinProperties = 属性(&R) -RemovableDrive = 可移动磁盘 -BuildSendtoMenu = 快速构建发送到子菜单 -UseStoreOpenWith = 在Microsoft Store中查找应用 -NewItem = 新建一个菜单项目 -AddGuidBlockedItem = 添加GUID锁定项目 -LockNewMenu = 锁定新建菜单 -EditSubItems = 编辑 "%s" 的子菜单项目 -InvalidItem = 无效菜单项目: -Separator = >>>>>> 分割线 <<<<<< -SelectExtension = 请选择一个文件扩展名 -SelectPerceivedType = 请选择一个文件感知类型 -SelectDirectoryType = 请选择一个目录感知类型 -CurrentExtension = 你当前选择的文件扩展名为 %s -CurrentPerceivedType = 你当前选择的文件感知类型为 %s -CurrentDirectoryType = 你当前选择的目录感知类型为 %s -WinXSortable = 启用 WinX 菜单排序功能 -ShowFilePath = 状态栏实时显示文件路径 -OpenMoreRegedit = 允许注册表编辑器多开 - [Dialog] Ok = 确认 Cancel = 取消 @@ -184,6 +153,9 @@ VideoDirectory = 视频目录 AudioDirectory = 音频目录 CheckReference = 请勾选你想要引用的菜单项目 CheckCopy = 请勾选你想要复制的菜单项目 +SelectExtension = 请选择一个文件扩展名 +SelectPerceivedType = 请选择一个文件感知类型 +SelectDirectoryType = 请选择一个目录感知类型 SelectGroup = 请选择保存分组 SelectNewItemType = 请选择新建菜单类型 SelectSubMenuMode = 该多级菜单子项目数为0, 你有两个选择:\n①该多级菜单的所有子菜单项目私有(推荐),\n②该多级菜单可与其他多级菜单引用相同子项,\n请做出你的选择...... @@ -234,17 +206,45 @@ LockNewMenu = 启用后可阻止第三方程序增加项目\n且可对现有项 CheckUpdate = 程序每月自动检测一次更新 (启动程序时)\n你可手动点击浏览Github、Gitee检查更新 LastCheckUpdateTime = 上次自动更新检查时间: OpenLanguagesDir = 打开语言文件夹 +OtherLanguages = 下载或上传其他语言文件 OpenDictionariesDir = 打开字典文件夹 ConfigPath = 更改配置和数据文件保存路径后,\n会导致部分已启用增强菜单失效,\n可在增强菜单中重新启用一遍 CommandFiles = 此命令依赖配置文件,移动配置文件位置\n会导致此菜单项失效,重新启用一遍即可 CreateGroup = 新建一个分组 [Other] +Open = 打开(&O) +Edit = 编辑(&E) +Explore = 浏览(&X) +ExploreOld = 资源管理器(&X) +Play = 播放(&L) +Print = 打印(&P) +Find = 搜索(&E)... +Runas = 以管理员身份运行(&A) +CustomFolder = 自定义文件夹(&F)... +MapNetworkDrive = 映射网络驱动器(&N)... +DisconnectNetworkDrive = 断开网络驱动器的连接(&C)... +RecycleBinProperties = 属性(&R) +RemovableDrive = 可移动磁盘 +BuildSendtoMenu = 快速构建发送到子菜单 +UseStoreOpenWith = 在Microsoft Store中查找应用 +NewItem = 新建一个菜单项目 +AddGuidBlockedItem = 添加GUID锁定项目 +LockNewMenu = 锁定新建菜单 +EditSubItems = 编辑 "%s" 的子菜单项目 +InvalidItem = 无效菜单项目: +Separator = >>>>>> 分割线 <<<<<< +CurrentExtension = 你当前选择的文件扩展名为 %s +CurrentPerceivedType = 你当前选择的文件感知类型为 %s +CurrentDirectoryType = 你当前选择的目录感知类型为 %s +WinXSortable = 启用 WinX 菜单排序功能 +ShowFilePath = 状态栏实时显示文件路径 +OpenMoreRegedit = 允许注册表编辑器多开 RestartExplorer = 当前部分操作需要重启文件资源管理器生效 + DictionaryDescription = 字典说明 GuidInfosDictionary = GUID信息 Translators = 翻译贡献者 -OtherLanguages = 下载或上传其他语言文件 DonationList = 捐赠名单 ConfigPath = 配置和数据文件保存位置 AppDataDir = AppData 目录