diff --git a/ContextMenuManager/AppImage.cs b/ContextMenuManager/AppImage.cs index 81aed7d..2c3d886 100644 --- a/ContextMenuManager/AppImage.cs +++ b/ContextMenuManager/AppImage.cs @@ -56,15 +56,15 @@ namespace ContextMenuManager ///管理员小盾牌 public static readonly Image Shield = ResourceIcon.GetIcon("imageres.dll", 73).ToBitmap(); ///资源管理器图标 - public static readonly Image Explorer = ResourceIcon.GetIcon("imageres.dll", 203).ToBitmap(); + public static readonly Image Explorer = ResourceIcon.GetIcon("explorer.exe", 0).ToBitmap(); ///刷新图标 public static readonly Image Refresh = ResourceIcon.GetIcon("shell32.dll", 238).ToBitmap(); ///自定义文件夹图标 - public static readonly Image CustomFolder = ResourceIcon.GetIcon("imageres.dll", 306).ToBitmap(); + public static readonly Image CustomFolder = ResourceIcon.GetIcon("imageres.dll", 3).ToBitmap(); ///网络驱动器图标 public static readonly Image NetworkDrive = ResourceIcon.GetIcon("imageres.dll", 28).ToBitmap(); ///回收站属性图标 - public static readonly Image RecycleBinProperties = ResourceIcon.GetIcon("imageres.dll", -5350).ToBitmap(); + public static readonly Image RecycleBinProperties = ResourceIcon.GetIcon("shell32.dll", -254).ToBitmap(); ///磁盘图标 public static readonly Image Drive = ResourceIcon.GetIcon("imageres.dll", 27).ToBitmap(); ///发送到图标 diff --git a/ContextMenuManager/AppString.cs b/ContextMenuManager/AppString.cs index a2777aa..45b85d0 100644 --- a/ContextMenuManager/AppString.cs +++ b/ContextMenuManager/AppString.cs @@ -8,7 +8,8 @@ namespace ContextMenuManager public static IniReader UserLanguage = new IniReader(Program.LanguageFilePath); private static readonly IniReader DefaultLanguage = new IniReader(new StringBuilder(Properties.Resources.AppLanguageDic)); - private static string GetValue(string section, string key) + + private static string GetStringValue(string section, string key) { string value = UserLanguage?.GetValue(section, key); if(string.IsNullOrEmpty(value)) value = DefaultLanguage.GetValue(section, key); @@ -18,248 +19,228 @@ namespace ContextMenuManager /// 常规 public static class General { - private static string GetGeneralValue(string key) => GetValue("General", key); - public static string Language = GetGeneralValue("Language"); - public static string AppName = GetGeneralValue("AppName"); + private static string GetValue(string key) => GetStringValue("General", key); + public static string Language => GetValue("Language"); + public static string AppName => GetValue("AppName"); } /// 工具栏 public static class ToolBar { - private static string GetToolBarValue(string key) => GetValue("ToolBar", key); - public static string Home = GetToolBarValue("Home"); - public static string Type = GetToolBarValue("Type"); - public static string Rule = GetToolBarValue("Rule"); - public static string About = GetToolBarValue("About"); + private static string GetValue(string key) => GetStringValue("ToolBar", key); + public static string Home => GetValue("Home"); + public static string Type => GetValue("Type"); + public static string Rule => GetValue("Rule"); + public static string About => GetValue("About"); } /// 侧边栏 public static class SideBar { - private static string GetSideBarValue(string key) => GetValue("SideBar", key); - public static string File = GetSideBarValue("File"); - public static string Folder = GetSideBarValue("Folder"); - public static string Directory = GetSideBarValue("Directory"); - public static string Background = GetSideBarValue("Background"); - public static string Desktop = GetSideBarValue("Desktop"); - public static string Drive = GetSideBarValue("Drive"); - public static string AllObjects = GetSideBarValue("AllObjects"); - public static string Computer = GetSideBarValue("Computer"); - public static string RecycleBin = GetSideBarValue("RecycleBin"); - public static string Library = GetSideBarValue("Library"); - public static string New = GetSideBarValue("New"); - public static string SendTo = GetSideBarValue("SendTo"); - public static string OpenWith = GetSideBarValue("OpenWith"); - public static string WinX = GetSideBarValue("WinX"); - - public static string LnkFile = GetSideBarValue("LnkFile"); - public static string ExeFile = GetSideBarValue("ExeFile"); - public static string TextFile = GetSideBarValue("TextFile"); - public static string ImageFile = GetSideBarValue("ImageFile"); - public static string VideoFile = GetSideBarValue("VideoFile"); - public static string AudioFile = GetSideBarValue("AudioFile"); - public static string ImageDirectory = GetSideBarValue("ImageDirectory"); - public static string VideoDirectory = GetSideBarValue("VideoDirectory"); - public static string AudioDirectory = GetSideBarValue("AudioDirectory"); - public static string UnknownType = GetSideBarValue("UnknownType"); - public static string CustomType = GetSideBarValue("CustomType"); - - public static string GuidBlocked = GetSideBarValue("GuidBlocked"); - public static string ThirdRules = GetSideBarValue("ThirdRules"); - - public static string AboutApp = GetSideBarValue("AboutApp"); - public static string Dictionaries = GetSideBarValue("Dictionaries"); - public static string AppLanguage = GetSideBarValue("AppLanguage"); - public static string Donate = GetSideBarValue("Donate"); + private static string GetValue(string key) => GetStringValue("SideBar", key); + public static string File => GetValue("File"); + public static string Folder => GetValue("Folder"); + public static string Directory => GetValue("Directory"); + public static string Background => GetValue("Background"); + public static string Desktop => GetValue("Desktop"); + public static string Drive => GetValue("Drive"); + public static string AllObjects => GetValue("AllObjects"); + public static string Computer => GetValue("Computer"); + public static string RecycleBin => GetValue("RecycleBin"); + public static string Library => GetValue("Library"); + public static string New => GetValue("New"); + public static string SendTo => GetValue("SendTo"); + public static string OpenWith => GetValue("OpenWith"); + public static string WinX => GetValue("WinX"); + public static string LnkFile => GetValue("LnkFile"); + public static string ExeFile => GetValue("ExeFile"); + public static string TextFile => GetValue("TextFile"); + public static string ImageFile => GetValue("ImageFile"); + public static string VideoFile => GetValue("VideoFile"); + public static string AudioFile => GetValue("AudioFile"); + public static string ImageDirectory => GetValue("ImageDirectory"); + public static string VideoDirectory => GetValue("VideoDirectory"); + public static string AudioDirectory => GetValue("AudioDirectory"); + public static string UnknownType => GetValue("UnknownType"); + public static string CustomType => GetValue("CustomType"); + public static string GuidBlocked => GetValue("GuidBlocked"); + public static string ThirdRules => GetValue("ThirdRules"); + public static string AboutApp => GetValue("AboutApp"); + public static string Dictionaries => GetValue("Dictionaries"); + public static string AppLanguage => GetValue("AppLanguage"); + public static string Donate => GetValue("Donate"); } /// 状态栏 public static class StatusBar { - private static string GetStatusBarValue(string key) => GetValue("StatusBar", key); - public static string File = GetStatusBarValue("File"); - public static string Folder = GetStatusBarValue("Folder"); - public static string Directory = GetStatusBarValue("Directory"); - public static string Background = GetStatusBarValue("Background"); - public static string Desktop = GetStatusBarValue("Desktop"); - public static string Drive = GetStatusBarValue("Drive"); - public static string AllObjects = GetStatusBarValue("AllObjects"); - public static string Computer = GetStatusBarValue("Computer"); - public static string RecycleBin = GetStatusBarValue("RecycleBin"); - public static string Library = GetStatusBarValue("Library"); - public static string New = GetStatusBarValue("New"); - public static string SendTo = GetStatusBarValue("SendTo"); - public static string OpenWith = GetStatusBarValue("OpenWith"); - public static string WinX = GetStatusBarValue("WinX"); - - public static string LnkFile = GetStatusBarValue("LnkFile"); - public static string ExeFile = GetStatusBarValue("ExeFile"); - public static string TextFile = GetStatusBarValue("TextFile"); - public static string ImageFile = GetStatusBarValue("ImageFile"); - public static string VideoFile = GetStatusBarValue("VideoFile"); - public static string AudioFile = GetStatusBarValue("AudioFile"); - public static string ImageDirectory = GetStatusBarValue("ImageDirectory"); - public static string VideoDirectory = GetStatusBarValue("VideoDirectory"); - public static string AudioDirectory = GetStatusBarValue("AudioDirectory"); - public static string UnknownType = GetStatusBarValue("UnknownType"); - public static string CustomType = GetStatusBarValue("CustomType"); - - public static string GuidBlocked = GetStatusBarValue("GuidBlocked"); - public static string ThirdRules = GetStatusBarValue("ThirdRules"); + private static string GetValue(string key) => GetStringValue("StatusBar", key); + public static string File => GetValue("File"); + public static string Folder => GetValue("Folder"); + public static string Directory => GetValue("Directory"); + public static string Background => GetValue("Background"); + public static string Desktop => GetValue("Desktop"); + public static string Drive => GetValue("Drive"); + public static string AllObjects => GetValue("AllObjects"); + public static string Computer => GetValue("Computer"); + public static string RecycleBin => GetValue("RecycleBin"); + public static string Library => GetValue("Library"); + public static string New => GetValue("New"); + public static string SendTo => GetValue("SendTo"); + public static string OpenWith => GetValue("OpenWith"); + public static string WinX => GetValue("WinX"); + public static string LnkFile => GetValue("LnkFile"); + public static string ExeFile => GetValue("ExeFile"); + public static string TextFile => GetValue("TextFile"); + public static string ImageFile => GetValue("ImageFile"); + public static string VideoFile => GetValue("VideoFile"); + public static string AudioFile => GetValue("AudioFile"); + public static string ImageDirectory => GetValue("ImageDirectory"); + public static string VideoDirectory => GetValue("VideoDirectory"); + public static string AudioDirectory => GetValue("AudioDirectory"); + public static string UnknownType => GetValue("UnknownType"); + public static string CustomType => GetValue("CustomType"); + public static string GuidBlocked => GetValue("GuidBlocked"); + public static string ThirdRules => GetValue("ThirdRules"); } /// 菜单 public static class Menu { - private static string GetMenuValue(string key) => GetValue("Menu", key); - public static string ChangeText = GetMenuValue("ChangeText"); - public static string ItemIcon = GetMenuValue("ItemIcon"); - public static string ChangeIcon = GetMenuValue("ChangeIcon"); - public static string AddIcon = GetMenuValue("AddIcon"); - public static string DeleteIcon = GetMenuValue("DeleteIcon"); - public static string ItemPosition = GetMenuValue("ItemPosition"); - public static string SetDefault = GetMenuValue("SetDefault"); - public static string SetTop = GetMenuValue("SetTop"); - public static string SetBottom = GetMenuValue("SetBottom"); - public static string OtherAttributes = GetMenuValue("OtherAttributes"); - public static string OnlyWithShift = GetMenuValue("OnlyWithShift"); - public static string OnlyInExplorer = GetMenuValue("OnlyInExplorer"); - public static string NoWorkingDirectory = GetMenuValue("NoWorkingDirectory"); - public static string ShowSeparator = GetMenuValue("ShowSeparator"); - public static string Details = GetMenuValue("Details"); - public static string WebSearch = GetMenuValue("WebSearch"); - public static string ChangeCommand = GetMenuValue("ChangeCommand"); - public static string FileProperties = GetMenuValue("FileProperties"); - public static string FileLocation = GetMenuValue("FileLocation"); - public static string RegistryLocation = GetMenuValue("RegistryLocation"); - public static string Delete = GetMenuValue("Delete"); - public static string DeleteReference = GetMenuValue("DeleteReference"); - public static string CopyGuid = GetMenuValue("CopyGuid"); - public static string InitialData = GetMenuValue("InitialData"); + private static string GetValue(string key) => GetStringValue("Menu", key); + public static string ChangeText => GetValue("ChangeText"); + public static string ItemIcon => GetValue("ItemIcon"); + public static string ChangeIcon => GetValue("ChangeIcon"); + public static string AddIcon => GetValue("AddIcon"); + public static string DeleteIcon => GetValue("DeleteIcon"); + public static string ItemPosition => GetValue("ItemPosition"); + public static string SetDefault => GetValue("SetDefault"); + public static string SetTop => GetValue("SetTop"); + public static string SetBottom => GetValue("SetBottom"); + public static string OtherAttributes => GetValue("OtherAttributes"); + public static string OnlyWithShift => GetValue("OnlyWithShift"); + public static string OnlyInExplorer => GetValue("OnlyInExplorer"); + public static string NoWorkingDirectory => GetValue("NoWorkingDirectory"); + public static string ShowSeparator => GetValue("ShowSeparator"); + public static string Details => GetValue("Details"); + public static string WebSearch => GetValue("WebSearch"); + public static string ChangeCommand => GetValue("ChangeCommand"); + public static string FileProperties => GetValue("FileProperties"); + public static string FileLocation => GetValue("FileLocation"); + public static string RegistryLocation => GetValue("RegistryLocation"); + public static string Delete => GetValue("Delete"); + public static string DeleteReference => GetValue("DeleteReference"); + public static string CopyGuid => GetValue("CopyGuid"); + public static string InitialData => GetValue("InitialData"); + public static string Edit => GetValue("Edit"); + 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 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 EditSubItems => GetValue("EditSubItems"); + public static string InvalidItem => GetValue("InvalidItem"); + public static string Separator => GetValue("Separator"); + } + + public static class Dialog + { + private static string GetValue(string key) => GetStringValue("Dialog", key); + public static string Ok => GetValue("Ok"); + public static string Cancel => GetValue("Cancel"); + public static string Browse => GetValue("Browse"); + public static string Program => GetValue("Program"); + public static string NewShellItem => GetValue("NewShellItem"); + public static string NewSendToItem => GetValue("NewSendToItem"); + public static string NewOpenWithItem => GetValue("NewOpenWithItem"); + public static string ItemText => GetValue("ItemText"); + public static string ItemCommand => GetValue("ItemCommand"); + public static string SingleMenu => GetValue("SingleMenu"); + public static string MultiMenu => GetValue("MultiMenu"); + public static string InputGuid => GetValue("InputGuid"); + public static string SelectExtension => GetValue("SelectExtension"); + public static string CheckReference => GetValue("CheckReference"); + public static string CheckCommon => GetValue("CheckCommon"); + public static string SelectSubMenuMode => GetValue("SelectSubMenuMode"); } /// 消息框 public static class MessageBox { - private static string GetMessageBoxValue(string key) => GetValue("MessageBox", key); - public static string TextCannotBeEmpty = GetMessageBoxValue("TextCannotBeEmpty"); - public static string CommandCannotBeEmpty = GetMessageBoxValue("CommandCannotBeEmpty"); - public static string StringParsingFailed = GetMessageBoxValue("StringParsingFailed"); - public static string TextLengthCannotExceed80 = GetMessageBoxValue("TextLengthCannotExceed80"); - public static string ConfirmDeletePermanently = GetMessageBoxValue("ConfirmDeletePermanently"); - public static string ConfirmDeleteReference = GetMessageBoxValue("ConfirmDeleteReference"); - public static string ConfirmDelete = GetMessageBoxValue("ConfirmDelete"); - public static string ConfirmDeleteReferenced = GetMessageBoxValue("ConfirmDeleteReferenced"); - public static string CannotAddNewItem = GetMessageBoxValue("CannotAddNewItem"); - public static string UnsupportedFilename = GetMessageBoxValue("UnsupportedFilename"); - public static string UnsupportedExtension = GetMessageBoxValue("UnsupportedExtension"); - public static string CannotChangePath = GetMessageBoxValue("CannotChangePath"); - public static string CopiedToClipboard = GetMessageBoxValue("CopiedToClipboard"); - public static string UnknownGuid = GetMessageBoxValue("UnknownGuid"); - public static string HasBeenAdded = GetMessageBoxValue("HasBeenAdded"); - public static string EditInitialData = GetMessageBoxValue("EditInitialData"); - public static string PromptIsOpenItem = GetMessageBoxValue("PromptIsOpenItem"); - public static string RestartApp = GetMessageBoxValue("RestartApp"); - public static string UpdateApp = GetMessageBoxValue("UpdateApp"); + private static string GetValue(string key) => GetStringValue("MessageBox", key); + public static string TextCannotBeEmpty => GetValue("TextCannotBeEmpty"); + public static string CommandCannotBeEmpty => GetValue("CommandCannotBeEmpty"); + public static string StringParsingFailed => GetValue("StringParsingFailed"); + public static string TextLengthCannotExceed80 => GetValue("TextLengthCannotExceed80"); + public static string ConfirmDeletePermanently => GetValue("ConfirmDeletePermanently"); + public static string ConfirmDeleteReference => GetValue("ConfirmDeleteReference"); + public static string ConfirmDelete => GetValue("ConfirmDelete"); + public static string ConfirmDeleteReferenced => GetValue("ConfirmDeleteReferenced"); + public static string CannotAddNewItem => GetValue("CannotAddNewItem"); + public static string UnsupportedFilename => GetValue("UnsupportedFilename"); + public static string UnsupportedExtension => GetValue("UnsupportedExtension"); + public static string CannotChangePath => GetValue("CannotChangePath"); + public static string CopiedToClipboard => GetValue("CopiedToClipboard"); + public static string UnknownGuid => GetValue("UnknownGuid"); + public static string HasBeenAdded => GetValue("HasBeenAdded"); + public static string EditInitialData => GetValue("EditInitialData"); + public static string PromptIsOpenItem => GetValue("PromptIsOpenItem"); + public static string RestartApp => GetValue("RestartApp"); + public static string UpdateApp => GetValue("UpdateApp"); + public static string FileOrFolderNotExists => GetValue("FileOrFolderNotExists"); } /// 其他文本 - public static class Text + public static class Other { - private static string GetTextValue(string key) => GetValue("Text", key); - public static string ItemName = GetTextValue("ItemName"); - public static string ItemCommand = GetTextValue("ItemCommand"); - - public static string Single = GetTextValue("Single"); - public static string Multi = GetTextValue("Multi"); - - public static string EditSubItems = GetTextValue("EditSubItems"); - public static string Separator = GetTextValue("Separator"); - public static string InvalidItem = GetTextValue("InvalidItem"); - public static string CheckReference = GetTextValue("CheckReference"); - public static string CheckCommon = GetTextValue("CheckCommon"); - public static string InputGuid = GetTextValue("InputGuid"); - - public static string Explore = GetTextValue("Explore"); - public static string CustomFolder = GetTextValue("CustomFolder"); - public static string BuildSendtoMenu = GetTextValue("BuildSendtoMenu"); - public static string UseStoreOpenWith = GetTextValue("UseStoreOpenWith"); - public static string RestartExplorer = GetTextValue("RestartExplorer"); - - public static string NewItem = GetTextValue("NewItem"); - public static string NewShellItem = GetTextValue("NewShellItem"); - public static string NewSendToItem = GetTextValue("NewSendToItem"); - public static string NewOpenWithItem = GetTextValue("NewOpenWithItem"); - public static string NewGuidBlockedItem = GetTextValue("NewGuidBlockedItem"); - - public static string SelectExtension = GetTextValue("SelectExtension"); - public static string CurrentExtension = GetTextValue("CurrentExtension"); - - public static string DictionaryDescription = GetTextValue("DictionaryDescription"); - public static string LanguageDictionary = GetTextValue("LanguageDictionary"); - public static string GuidInfosDictionary = GetTextValue("GuidInfosDictionary"); - public static string ThridRulesDictionary = GetTextValue("ThridRulesDictionary"); - public static string CommonItemsDictionary = GetTextValue("CommonItemsDictionary"); - public static string Translators = GetTextValue("Translators"); - public static string OtherLanguages = GetTextValue("OtherLanguages"); - public static string SelectSubMenuMode = GetTextValue("SelectSubMenuMode"); - public static string AboutApp = GetTextValue("AboutApp"); - public static string Dictionaries = GetTextValue("Dictionaries"); - public static string Donate = GetTextValue("Donate"); + private static string GetValue(string key) => GetStringValue("Other", key); + public static string RestartExplorer => GetValue("RestartExplorer"); + public static string DictionaryDescription => GetValue("DictionaryDescription"); + public static string LanguageDictionary => GetValue("LanguageDictionary"); + public static string GuidInfosDictionary => GetValue("GuidInfosDictionary"); + public static string ThridRulesDictionary => GetValue("ThridRulesDictionary"); + public static string CommonItemsDictionary => GetValue("CommonItemsDictionary"); + public static string Translators => GetValue("Translators"); + public static string OtherLanguages => GetValue("OtherLanguages"); + public static string SelectSubMenuMode => GetValue("SelectSubMenuMode"); + public static string AboutApp => GetValue("AboutApp"); + public static string Dictionaries => GetValue("Dictionaries"); + public static string Donate => GetValue("Donate"); } /// 提示文本 public static class Tip { - private static string GetTipValue(string key) => GetValue("Tip", key); - public static string RestartExplorer = GetTipValue("RestartExplorer"); - public static string CustomFolder = GetTipValue("CustomFolder"); - public static string SendToDrive = GetTipValue("SendToDrive"); - public static string BuildSendtoMenu = GetTipValue("BuildSendtoMenu"); - public static string UseStoreOpenWith = GetTipValue("UseStoreOpenWith"); - public static string EditSubItems = GetTipValue("EditSubItems"); - public static string InvalidItem = GetTipValue("InvalidItem"); - public static string AddSeparator = GetTipValue("AddSeparator"); - public static string Separator = GetTipValue("Separator"); - public static string AddExistingItems = GetTipValue("AddExistingItems"); - public static string AddCommonItems = GetTipValue("AddCommonItems"); - } - - /// 国际化字符串 - public static class Indirect - { - /// 确定 - public static readonly string Ok = ResourceString.GetDirectString("@shell32.dll,-9752"); - /// 取消 - public static readonly string Cancel = ResourceString.GetDirectString("@shell32.dll,-9751"); - /// 浏览 - public static readonly string Browse = ResourceString.GetDirectString("@shell32.dll,-9015"); - /// 打开 - public static readonly string Open = ResourceString.GetDirectString("@shell32.dll,-12850"); - /// 编辑 - public static readonly string Edit = ResourceString.GetDirectString("@shell32.dll,-37398"); - /// 打印 - public static readonly string Print = ResourceString.GetDirectString("@shell32.dll,-31250"); - /// 搜索 - public static readonly string Find = ResourceString.GetDirectString("@shell32.dll,-9031"); - /// 播放 - public static readonly string Play = ResourceString.GetDirectString("@shell32.dll,-31283"); - /// 以管理员身份运行 - public static readonly string Runas = ResourceString.GetDirectString("@shell32.dll,-37417"); - /// 保存 - public static readonly string Save = ResourceString.GetDirectString("@shell32.dll,-38243"); - /// 程序 - public static readonly string Programs = ResourceString.GetDirectString("@shell32.dll,-21782"); - /// 可移动磁盘 - public static readonly string RemovableDrive = ResourceString.GetDirectString("@shell32.dll,-9309"); - /// 映射网络驱动器 - public static readonly string MapNetworkDrive = ResourceString.GetDirectString("@shell32.dll,-31300"); - /// 断开网络驱动器的连接 - public static readonly string DisconnectNetworkDrive = ResourceString.GetDirectString("@shell32.dll,-31304"); - /// 回收站属性 - public static readonly string RecycleBinProperties = ResourceString.GetDirectString("@shell32.dll,-31338"); - ///文件或文件夹不存在 - public static readonly string FileOrFolderNotExists = ResourceString.GetDirectString("@shell32.dll,-4132"); + private static string GetValue(string key) => GetStringValue("Tip", key); + public static string RestartExplorer => GetValue("RestartExplorer"); + public static string CustomFolder => GetValue("CustomFolder"); + public static string SendToDrive => GetValue("SendToDrive"); + public static string BuildSendtoMenu => GetValue("BuildSendtoMenu"); + public static string EditSubItems => GetValue("EditSubItems"); + public static string InvalidItem => GetValue("InvalidItem"); + public static string AddSeparator => GetValue("AddSeparator"); + public static string Separator => GetValue("Separator"); + public static string AddExistingItems => GetValue("AddExistingItems"); + public static string AddCommonItems => GetValue("AddCommonItems"); } } } \ No newline at end of file diff --git a/ContextMenuManager/BulePointLilac.Controls/InputDialog.cs b/ContextMenuManager/BulePointLilac.Controls/InputDialog.cs index 5cfb9d5..044865f 100644 --- a/ContextMenuManager/BulePointLilac.Controls/InputDialog.cs +++ b/ContextMenuManager/BulePointLilac.Controls/InputDialog.cs @@ -54,14 +54,14 @@ namespace BulePointLilac.Controls { Anchor = AnchorStyles.Bottom | AnchorStyles.Right, DialogResult = DialogResult.OK, - Text = AppString.Indirect.Ok, + Text = AppString.Dialog.Ok, AutoSize = true }; readonly Button BtnCancel = new Button { Anchor = AnchorStyles.Bottom | AnchorStyles.Right, DialogResult = DialogResult.Cancel, - Text = AppString.Indirect.Cancel, + Text = AppString.Dialog.Cancel, AutoSize = true }; diff --git a/ContextMenuManager/BulePointLilac.Controls/MyListBox.cs b/ContextMenuManager/BulePointLilac.Controls/MyListBox.cs index 64760c0..eae2e52 100644 --- a/ContextMenuManager/BulePointLilac.Controls/MyListBox.cs +++ b/ContextMenuManager/BulePointLilac.Controls/MyListBox.cs @@ -117,6 +117,7 @@ namespace BulePointLilac.Controls { public int Compare(MyListItem x, MyListItem y) { + if(x.Equals(y)) return 0; string[] strs = { x.Text, y.Text }; Array.Sort(strs); if(strs[0] == x.Text) return -1; diff --git a/ContextMenuManager/BulePointLilac.Methods/ObjectPath.cs b/ContextMenuManager/BulePointLilac.Methods/ObjectPath.cs index e751476..a3ef832 100644 --- a/ContextMenuManager/BulePointLilac.Methods/ObjectPath.cs +++ b/ContextMenuManager/BulePointLilac.Methods/ObjectPath.cs @@ -50,9 +50,19 @@ namespace BulePointLilac.Methods /// 成功提取返回现有文件路径,否则返回值为null public static string ExtractFilePath(string command) { + return ExtractFilePath(command, out _); + } + + /// 文件短路径 + public static string ExtractFilePath(string command, out string shortPath) + { + shortPath = null; if(string.IsNullOrWhiteSpace(command)) return null; command = Environment.ExpandEnvironmentVariables(command).Replace(@"\\", @"\"); - if(File.Exists(command)) return command; + if(File.Exists(command)) { + shortPath = command; + return command; + } string[] strs = Array.FindAll(command.Split(IllegalChars), str => IgnoreCommandParts.Any(part => !part.Equals(str.Trim()))).Reverse().ToArray(); @@ -66,8 +76,15 @@ namespace BulePointLilac.Methods if(path1.Contains(",")) paths.Add(path1.Substring(0, path1.LastIndexOf(','))); foreach(string path in paths) { - if(File.Exists(path)) return path; - if(GetFullFilePath(path, out string fullPath)) return fullPath; + if(File.Exists(path)) { + shortPath = path; + return path; + } + if(GetFullFilePath(path, out string fullPath)) + { + shortPath = path; + return fullPath; + } } index = path1.LastIndexOf(' '); } while(index != -1); diff --git a/ContextMenuManager/ContextMenuManager.csproj b/ContextMenuManager/ContextMenuManager.csproj index 3c03c5c..5afb157 100644 --- a/ContextMenuManager/ContextMenuManager.csproj +++ b/ContextMenuManager/ContextMenuManager.csproj @@ -372,4 +372,7 @@ + + Xcopy $(ProjectDir)\Properties\Resources\Texts\AppLanguageDic.ini $(SolutionDir)\languages\zh-CN.ini /y + \ No newline at end of file diff --git a/ContextMenuManager/Controls/AboutApp.cs b/ContextMenuManager/Controls/AboutApp.cs index b85e5c8..5c7ae19 100644 --- a/ContextMenuManager/Controls/AboutApp.cs +++ b/ContextMenuManager/Controls/AboutApp.cs @@ -7,7 +7,6 @@ using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Threading; -using System.Threading.Tasks; using System.Windows.Forms; namespace ContextMenuManager.Controls @@ -24,7 +23,7 @@ namespace ContextMenuManager.Controls readonly Label lblInfo = new Label { Font = new Font(SystemFonts.MenuFont.FontFamily, 10F), - Text = AppString.Text.Donate, + Text = AppString.Other.Donate, AutoSize = true }; @@ -93,18 +92,18 @@ namespace ContextMenuManager.Controls } readonly TabPage[] pages = new TabPage[] { - new TabPage(AppString.Text.DictionaryDescription), - new TabPage(AppString.Text.LanguageDictionary), - new TabPage(AppString.Text.GuidInfosDictionary), - new TabPage(AppString.Text.ThridRulesDictionary), - new TabPage(AppString.Text.CommonItemsDictionary) + new TabPage(AppString.Other.DictionaryDescription), + new TabPage(AppString.Other.LanguageDictionary), + new TabPage(AppString.Other.GuidInfosDictionary), + new TabPage(AppString.Other.ThridRulesDictionary), + new TabPage(AppString.Other.CommonItemsDictionary) }; readonly AboutAppBox[] boxs = new AboutAppBox[5]; readonly ContextMenuStrip cms = new ContextMenuStrip(); readonly ToolStripItem[] items = new ToolStripItem[] { - new ToolStripMenuItem(AppString.Indirect.Edit), + new ToolStripMenuItem(AppString.Menu.Edit), new ToolStripSeparator(), - new ToolStripMenuItem(AppString.Indirect.Save) + new ToolStripMenuItem(AppString.Menu.Save) }; [DllImport("user32.dll")] @@ -170,15 +169,15 @@ namespace ContextMenuManager.Controls } bool hadLoaded = false; - public async void LoadTexts() + public void LoadTexts() { if(hadLoaded) return; hadLoaded = true; - boxs[0].Text = AppString.Text.Dictionaries; - await Task.Run(() => boxs[1].BeginInvoke(new Action(boxs[1].LoadIni), new[] { Properties.Resources.AppLanguageDic })); - await Task.Run(() => boxs[2].BeginInvoke(new Action(boxs[2].LoadIni), new[] { Properties.Resources.GuidInfosDic })); - await Task.Run(() => boxs[3].BeginInvoke(new Action(boxs[3].LoadXml), new[] { Properties.Resources.ThirdRulesDic })); - await Task.Run(() => boxs[4].BeginInvoke(new Action(boxs[4].LoadXml), new[] { Properties.Resources.ShellCommonDic })); + boxs[0].Text = AppString.Other.Dictionaries; + this.BeginInvoke(new Action(boxs[1].LoadIni), new[] { Properties.Resources.AppLanguageDic }); + this.BeginInvoke(new Action(boxs[2].LoadIni), new[] { Properties.Resources.GuidInfosDic }); + this.BeginInvoke(new Action(boxs[3].LoadXml), new[] { Properties.Resources.ThirdRulesDic }); + this.BeginInvoke(new Action(boxs[4].LoadXml), new[] { Properties.Resources.ShellCommonDic }); } } @@ -204,7 +203,7 @@ namespace ContextMenuManager.Controls readonly LinkLabel llbOtherLanguages = new LinkLabel { - Text = AppString.Text.OtherLanguages, + Text = AppString.Other.OtherLanguages, AutoSize = true }; @@ -236,7 +235,7 @@ namespace ContextMenuManager.Controls cmbLanguages.Items.Clear(); cmbLanguages.Items.Add("(默认) 简体中文"); cmbLanguages.SelectedIndex = 0; - string str = AppString.Text.Translators + Environment.NewLine; + string str = AppString.Other.Translators + Environment.NewLine; DirectoryInfo di = new DirectoryInfo(Program.LanguagesDir); if(di.Exists) { diff --git a/ContextMenuManager/Controls/ExplorerRestarter.cs b/ContextMenuManager/Controls/ExplorerRestarter.cs index 96bef31..c27e36d 100644 --- a/ContextMenuManager/Controls/ExplorerRestarter.cs +++ b/ContextMenuManager/Controls/ExplorerRestarter.cs @@ -13,7 +13,7 @@ namespace ContextMenuManager.Controls this.Visible = false; this.Dock = DockStyle.Bottom; this.Image = AppImage.Explorer; - this.Text = AppString.Text.RestartExplorer; + this.Text = AppString.Other.RestartExplorer; MyToolTip.SetToolTip(BtnRestart, AppString.Tip.RestartExplorer); this.AddCtr(BtnRestart); this.CanMoveForm(); diff --git a/ContextMenuManager/Controls/FileExtensionDialog.cs b/ContextMenuManager/Controls/FileExtensionDialog.cs index 1555bf5..f0f39ae 100644 --- a/ContextMenuManager/Controls/FileExtensionDialog.cs +++ b/ContextMenuManager/Controls/FileExtensionDialog.cs @@ -37,20 +37,13 @@ namespace ContextMenuManager.Controls { if(extKey == null) return null; string defaultType = extKey.GetValue("")?.ToString(); + if(TypeNameExists(defaultType)) return defaultType; using(var key = extKey.OpenSubKey("OpenWithProgids")) { - if(key == null) - { - if(TypeNameExists(defaultType)) return defaultType; - else return null; - } + if(key == null) return null; foreach(string valueName in key.GetValueNames()) { - if(!includeUWP && key.GetValueKind(valueName) != Microsoft.Win32.RegistryValueKind.String) - { - if(TypeNameExists(defaultType)) return defaultType; - continue; - } + if(!includeUWP && key.GetValueKind(valueName) != Microsoft.Win32.RegistryValueKind.String) continue; if(TypeNameExists(valueName)) return valueName; } } @@ -65,7 +58,7 @@ namespace ContextMenuManager.Controls { this.AcceptButton = btnOk; this.CancelButton = btnCancel; - this.Text = AppString.Text.SelectExtension; + this.Text = AppString.Dialog.SelectExtension; this.Font = SystemFonts.MenuFont; this.ShowIcon = this.ShowInTaskbar = false; this.MaximizeBox = this.MinimizeBox = false; @@ -98,13 +91,13 @@ namespace ContextMenuManager.Controls }; readonly Button btnOk = new Button { - Text = AppString.Indirect.Ok, + Text = AppString.Dialog.Ok, AutoSize = true }; readonly Button btnCancel = new Button { DialogResult = DialogResult.Cancel, - Text = AppString.Indirect.Cancel, + Text = AppString.Dialog.Cancel, AutoSize = true }; diff --git a/ContextMenuManager/Controls/GuidBlockedList.cs b/ContextMenuManager/Controls/GuidBlockedList.cs index fe135ca..8cca84e 100644 --- a/ContextMenuManager/Controls/GuidBlockedList.cs +++ b/ContextMenuManager/Controls/GuidBlockedList.cs @@ -34,11 +34,11 @@ namespace ContextMenuManager.Controls private void AddNewItem() { - NewItem newItem = new NewItem { Text = AppString.Text.NewGuidBlockedItem }; + NewItem newItem = new NewItem { Text = AppString.Item.AddGuidBlockedItem }; this.AddItem(newItem); newItem.NewItemAdd += (sender, e) => { - using(InputDialog dlg = new InputDialog { Title = AppString.Text.InputGuid }) + using(InputDialog dlg = new InputDialog { Title = AppString.Dialog.InputGuid }) { if(GuidInfo.TryGetGuid(Clipboard.GetText(), out Guid guid)) dlg.Text = guid.ToString(); if(dlg.ShowDialog() != DialogResult.OK) return; diff --git a/ContextMenuManager/Controls/NewItem.cs b/ContextMenuManager/Controls/NewItem.cs index 4eab1af..39d0489 100644 --- a/ContextMenuManager/Controls/NewItem.cs +++ b/ContextMenuManager/Controls/NewItem.cs @@ -8,9 +8,9 @@ namespace ContextMenuManager.Controls public NewItem() { this.Image = AppImage.NewItem; - this.Text = AppString.Text.NewItem; + this.Text = AppString.Item.NewItem; this.AddCtr(BtnAddNewItem); - MyToolTip.SetToolTip(BtnAddNewItem, AppString.Text.NewItem); + MyToolTip.SetToolTip(BtnAddNewItem, AppString.Item.NewItem); BtnAddNewItem.MouseDown += (sender, e) => NewItemAdd?.Invoke(null, null); } public event EventHandler NewItemAdd; diff --git a/ContextMenuManager/Controls/NewItemForm.cs b/ContextMenuManager/Controls/NewItemForm.cs index ca53901..0a9578a 100644 --- a/ContextMenuManager/Controls/NewItemForm.cs +++ b/ContextMenuManager/Controls/NewItemForm.cs @@ -24,32 +24,32 @@ namespace ContextMenuManager.Controls public string ItemText { get => txtText.Text; set => txtText.Text = value; } public string ItemCommand { get => txtCommand.Text; set => txtCommand.Text = value; } - protected readonly Label lblName = new Label + protected readonly Label lblText = new Label { - Text = AppString.Text.ItemName, + Text = AppString.Dialog.ItemText, AutoSize = true }; protected readonly Label lblCommand = new Label { - Text = AppString.Text.ItemCommand, + Text = AppString.Dialog.ItemCommand, AutoSize = true }; protected readonly TextBox txtText = new TextBox(); protected readonly TextBox txtCommand = new TextBox(); protected readonly Button btnBrowse = new Button { - Text = AppString.Indirect.Browse, + Text = AppString.Dialog.Browse, AutoSize = true }; protected readonly Button btnOk = new Button { - Text = AppString.Indirect.Ok, + Text = AppString.Dialog.Ok, AutoSize = true }; protected readonly Button btnCancel = new Button { DialogResult = DialogResult.Cancel, - Text = AppString.Indirect.Cancel, + Text = AppString.Dialog.Cancel, AutoSize = true }; @@ -57,15 +57,15 @@ namespace ContextMenuManager.Controls protected virtual void InitializeComponents() { - this.Controls.AddRange(new Control[] { lblName, lblCommand, txtText, txtCommand, btnBrowse, btnOk, btnCancel }); + this.Controls.AddRange(new Control[] { lblText, lblCommand, txtText, txtCommand, btnBrowse, btnOk, btnCancel }); int a = 20.DpiZoom(); btnBrowse.Anchor = btnOk.Anchor = btnCancel.Anchor = AnchorStyles.Right | AnchorStyles.Top; - txtText.Top = lblName.Top = lblName.Left = lblCommand.Left = a; + txtText.Top = lblText.Top = lblText.Left = lblCommand.Left = a; btnBrowse.Top = txtCommand.Top = lblCommand.Top = txtText.Bottom + a; btnOk.Top = btnCancel.Top = btnBrowse.Bottom + a; btnCancel.Left = btnBrowse.Left = this.ClientSize.Width - btnCancel.Width - a; btnOk.Left = btnCancel.Left - btnOk.Width - a; - int b = Math.Max(lblName.Width, lblCommand.Width) + btnBrowse.Width + 4 * a; + int b = Math.Max(lblText.Width, lblCommand.Width) + btnBrowse.Width + 4 * a; this.ClientSize = new Size(250.DpiZoom() + b, btnOk.Bottom + a); this.MinimumSize = this.Size; this.Resize += (sender, e) => diff --git a/ContextMenuManager/Controls/NewOpenWithDialog.cs b/ContextMenuManager/Controls/NewOpenWithDialog.cs index 94f9da9..31aad76 100644 --- a/ContextMenuManager/Controls/NewOpenWithDialog.cs +++ b/ContextMenuManager/Controls/NewOpenWithDialog.cs @@ -31,7 +31,7 @@ namespace ContextMenuManager.Controls protected override void InitializeComponents() { base.InitializeComponents(); - this.Text = AppString.Text.NewOpenWithItem; + this.Text = AppString.Dialog.NewOpenWithItem; btnBrowse.Click += (sender, e) => BrowseFile(); btnOk.Click += (sender, e) => { @@ -61,7 +61,7 @@ namespace ContextMenuManager.Controls { using(OpenFileDialog dlg = new OpenFileDialog()) { - dlg.Filter = $"{AppString.Indirect.Programs}|*.exe"; + dlg.Filter = $"{AppString.Dialog.Program}|*.exe"; if(dlg.ShowDialog() == DialogResult.OK) { ItemCommand = $"\"{dlg.FileName}\" \"%1\""; diff --git a/ContextMenuManager/Controls/NewSendToDialog.cs b/ContextMenuManager/Controls/NewSendToDialog.cs index 83b7425..c572966 100644 --- a/ContextMenuManager/Controls/NewSendToDialog.cs +++ b/ContextMenuManager/Controls/NewSendToDialog.cs @@ -40,7 +40,7 @@ namespace ContextMenuManager.Controls protected override void InitializeComponents() { base.InitializeComponents(); - this.Text = AppString.Text.NewSendToItem; + this.Text = AppString.Dialog.NewSendToItem; this.Controls.AddRange(new[] { rdoFile, rdoFolder }); rdoFile.Top = rdoFolder.Top = btnOk.Top; rdoFile.Left = lblCommand.Left; @@ -66,7 +66,7 @@ namespace ContextMenuManager.Controls } if(ObjectPath.ExtractFilePath(ItemCommand) == null && !Directory.Exists(ItemCommand)) { - MessageBoxEx.Show(AppString.Indirect.FileOrFolderNotExists); + MessageBoxEx.Show(AppString.MessageBox.FileOrFolderNotExists); return; } AddNewItem(); @@ -78,10 +78,10 @@ namespace ContextMenuManager.Controls { using(OpenFileDialog dlg = new OpenFileDialog()) { - dlg.Filter = $"{AppString.Indirect.Programs}|*.exe;*.bat;*.cmd;*.vbs;*.vbe;*.jse;*.wsf"; + dlg.Filter = $"{AppString.Dialog.Program}|*.exe;*.bat;*.cmd;*.vbs;*.vbe;*.jse;*.wsf"; if(dlg.ShowDialog() == DialogResult.OK) { - ItemCommand = dlg.FileName; + ItemCommand = $"\"{dlg.FileName}\""; ItemText = Path.GetFileNameWithoutExtension(dlg.FileName); } } @@ -106,8 +106,15 @@ namespace ContextMenuManager.Controls FilePath = ObjectPath.GetNewPathWithIndex(FilePath, ObjectPath.PathType.File); IWshRuntimeLibrary.IWshShortcut shortcut = WshShell.CreateShortcut(FilePath); - shortcut.TargetPath = ItemCommand; - if(rdoFile.Checked) shortcut.WorkingDirectory = Path.GetDirectoryName(ItemCommand); + if(rdoFile.Checked) + { + ItemCommand = Environment.ExpandEnvironmentVariables(ItemCommand); + shortcut.TargetPath = ObjectPath.ExtractFilePath(ItemCommand, out string shortPath); + string str = ItemCommand.Substring(ItemCommand.IndexOf(shortPath) + shortPath.Length); + shortcut.Arguments = str.Substring(str.IndexOf(" ") + 1); + shortcut.WorkingDirectory = Path.GetDirectoryName(shortcut.TargetPath); + } + else shortcut.TargetPath = ItemCommand; shortcut.Save(); DesktopIniHelper.SetLocalizedFileName(FilePath, ItemText); } diff --git a/ContextMenuManager/Controls/NewShellDialog.cs b/ContextMenuManager/Controls/NewShellDialog.cs index 0c5b0af..fc5b457 100644 --- a/ContextMenuManager/Controls/NewShellDialog.cs +++ b/ContextMenuManager/Controls/NewShellDialog.cs @@ -36,13 +36,13 @@ namespace ContextMenuManager.Controls readonly RadioButton rdoSingle = new RadioButton { - Text = AppString.Text.Single, + Text = AppString.Dialog.SingleMenu, AutoSize = true, Checked = true }; readonly RadioButton rdoMulti = new RadioButton { - Text = AppString.Text.Multi, + Text = AppString.Dialog.MultiMenu, AutoSize = true }; @@ -63,7 +63,7 @@ namespace ContextMenuManager.Controls protected override void InitializeComponents() { base.InitializeComponents(); - this.Text = AppString.Text.NewShellItem; + this.Text = AppString.Dialog.NewShellItem; this.Controls.AddRange(new[] { rdoSingle, rdoMulti }); rdoSingle.Top = rdoMulti.Top = btnOk.Top; rdoSingle.Left = lblCommand.Left; @@ -95,7 +95,7 @@ namespace ContextMenuManager.Controls { using(OpenFileDialog dlg = new OpenFileDialog()) { - dlg.Filter = $"{AppString.Indirect.Programs}|*.exe;*.bat;*.cmd;*.pif;*.com"; + dlg.Filter = $"{AppString.Dialog.Program}|*.exe;*.bat;*.cmd;*.pif;*.com"; if(dlg.ShowDialog() != DialogResult.OK) return; ItemCommand = $"\"{dlg.FileName}\""; ItemText = Path.GetFileNameWithoutExtension(dlg.FileName); diff --git a/ContextMenuManager/Controls/OpenWithList.cs b/ContextMenuManager/Controls/OpenWithList.cs index 2bf7cbf..26b96f7 100644 --- a/ContextMenuManager/Controls/OpenWithList.cs +++ b/ContextMenuManager/Controls/OpenWithList.cs @@ -16,7 +16,12 @@ namespace ContextMenuManager.Controls this.LoadCommonItems(); this.SortItemByText(); this.AddNewItem(); - this.InsertItem(new RegRuleItem(RegRuleItem.UseStoreOpenWith) { MarginRight = RegRuleItem.SysMarginRignt }, 1); + RegRuleItem storeItem = new RegRuleItem(RegRuleItem.UseStoreOpenWith) + { + MarginRight = RegRuleItem.SysMarginRignt, + Visible = Environment.OSVersion.Version.Major == 10 + }; + this.InsertItem(storeItem, 1); } private void LoadCommonItems() diff --git a/ContextMenuManager/Controls/RegRuleItem.cs b/ContextMenuManager/Controls/RegRuleItem.cs index 0b07bc6..098eecc 100644 --- a/ContextMenuManager/Controls/RegRuleItem.cs +++ b/ContextMenuManager/Controls/RegRuleItem.cs @@ -128,7 +128,7 @@ namespace ContextMenuManager.Controls }, ItemInfo = new ItemInfo { - Text = AppString.Text.CustomFolder, + Text = AppString.Item.CustomFolder, Image = AppImage.CustomFolder, Tip = AppString.Tip.CustomFolder, RestartExplorer = true @@ -143,7 +143,7 @@ namespace ContextMenuManager.Controls }, ItemInfo = new ItemInfo { - Text = $"{AppString.Indirect.MapNetworkDrive} && {AppString.Indirect.DisconnectNetworkDrive}", + Text = $"{AppString.Item.MapNetworkDrive} && {AppString.Item.DisconnectNetworkDrive}", Image = AppImage.NetworkDrive, RestartExplorer = true } @@ -157,7 +157,7 @@ namespace ContextMenuManager.Controls }, ItemInfo = new ItemInfo { - Text = AppString.Indirect.RecycleBinProperties, + Text = AppString.Item.RecycleBinProperties, Image = AppImage.RecycleBinProperties, RestartExplorer = true } @@ -171,7 +171,7 @@ namespace ContextMenuManager.Controls }, ItemInfo = new ItemInfo { - Text = AppString.Indirect.RemovableDrive, + Text = AppString.Item.RemovableDrive, Image = AppImage.Drive, Tip = AppString.Tip.SendToDrive, RestartExplorer = true @@ -186,7 +186,7 @@ namespace ContextMenuManager.Controls }, ItemInfo = new ItemInfo { - Text = AppString.Text.BuildSendtoMenu, + Text = AppString.Item.BuildSendtoMenu, Image = AppImage.SendTo, Tip = AppString.Tip.BuildSendtoMenu } @@ -200,9 +200,8 @@ namespace ContextMenuManager.Controls }, ItemInfo = new ItemInfo { - Text = AppString.Text.UseStoreOpenWith, - Image = AppImage.MicrosoftStore, - Tip = AppString.Tip.UseStoreOpenWith + Text = AppString.Item.UseStoreOpenWith, + Image = AppImage.MicrosoftStore } }; } diff --git a/ContextMenuManager/Controls/SelectItemsForm.cs b/ContextMenuManager/Controls/SelectItemsForm.cs index 805cbbb..818b3e1 100644 --- a/ContextMenuManager/Controls/SelectItemsForm.cs +++ b/ContextMenuManager/Controls/SelectItemsForm.cs @@ -30,14 +30,14 @@ namespace ContextMenuManager.Controls { Anchor = AnchorStyles.Bottom | AnchorStyles.Right, DialogResult = DialogResult.OK, - Text = AppString.Indirect.Ok, + Text = AppString.Dialog.Ok, AutoSize = true }; protected Button btnCancel = new Button { Anchor = AnchorStyles.Bottom | AnchorStyles.Right, DialogResult = DialogResult.Cancel, - Text = AppString.Indirect.Cancel, + Text = AppString.Dialog.Cancel, AutoSize = true }; diff --git a/ContextMenuManager/Controls/ShellCommonDialog.cs b/ContextMenuManager/Controls/ShellCommonDialog.cs index c06dc5e..2a3a83e 100644 --- a/ContextMenuManager/Controls/ShellCommonDialog.cs +++ b/ContextMenuManager/Controls/ShellCommonDialog.cs @@ -41,7 +41,7 @@ namespace ContextMenuManager.Controls this.ScenePath = scenePath; this.ShellPath = shellPath; this.ShellExPath = shellExPath; - this.Text = AppString.Text.CheckCommon; + this.Text = AppString.Dialog.CheckCommon; btnOk.Click += (sender, e) => GetSelectedItems(); LoadItems(); } diff --git a/ContextMenuManager/Controls/ShellItem.cs b/ContextMenuManager/Controls/ShellItem.cs index ecef525..fe0e981 100644 --- a/ContextMenuManager/Controls/ShellItem.cs +++ b/ContextMenuManager/Controls/ShellItem.cs @@ -18,9 +18,9 @@ namespace ContextMenuManager.Controls /// Shell类型菜单特殊注册表项名默认名称 private static readonly Dictionary DefaultNames = new Dictionary(StringComparer.OrdinalIgnoreCase) { - {"open", AppString.Indirect.Open }, {"edit", AppString.Indirect.Edit }, {"print", AppString.Indirect.Print }, - {"find", AppString.Indirect.Find }, {"play", AppString.Indirect.Play }, {"runas", AppString.Indirect.Runas }, - {"explore", AppString.Text.Explore },//"浏览" 未找到合适的本地化字符串资源 + {"open", AppString.Item.Open }, {"edit", AppString.Item.Edit }, {"print", AppString.Item.Print }, + {"find", AppString.Item.Find }, {"play", AppString.Item.Play }, {"runas", AppString.Item.Runas }, + {"explore", AppString.Item.Explore } }; /// 菜单项目在菜单中出现的位置 @@ -133,9 +133,13 @@ namespace ContextMenuManager.Controls { get { - if(Convert.ToInt32(Registry.GetValue(RegPath, "HideBasedOnVelocityId", null)) == 0x639bc8) return false; + if(Convert.ToInt32(Registry.GetValue(RegPath, "CommandFlags", 0)) % 16 >= 8) return false; + //HideBasedOnVelocityId键值不适用于Win7系统,且在新版Win10为0x639bc8,在低版本Win10中为0x6698a6 + int value = Convert.ToInt32(Registry.GetValue(RegPath, "HideBasedOnVelocityId", 0)); + if(value == 0x639bc8 || value == 0x6698a6) return false; if(!IsSubItem) { + //LegacyDisable和ProgrammaticAccessOnly键值不适用于子菜单 if(Registry.GetValue(RegPath, "LegacyDisable", null) != null) return false; if(Registry.GetValue(RegPath, "ProgrammaticAccessOnly", null) != null) return false; } @@ -145,6 +149,7 @@ namespace ContextMenuManager.Controls { if(value) { + RegistryEx.DeleteValue(RegPath, "CommandFlags"); RegistryEx.DeleteValue(RegPath, "HideBasedOnVelocityId"); RegistryEx.DeleteValue(RegPath, "LegacyDisable"); RegistryEx.DeleteValue(RegPath, "ProgrammaticAccessOnly"); @@ -152,7 +157,7 @@ namespace ContextMenuManager.Controls else { if(TryProtectOpenItem) return; - Registry.SetValue(RegPath, "HideBasedOnVelocityId", 0x639bc8); + Registry.SetValue(RegPath, "CommandFlags", 8); } } } @@ -364,7 +369,7 @@ namespace ContextMenuManager.Controls { using(ShellSubMenuDialog dlg = new ShellSubMenuDialog()) { - dlg.Text = AppString.Text.EditSubItems.Replace("%s", this.Text); + dlg.Text = AppString.Item.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 8352a7b..3fa7e52 100644 --- a/ContextMenuManager/Controls/ShellList.cs +++ b/ContextMenuManager/Controls/ShellList.cs @@ -266,12 +266,12 @@ namespace ContextMenuManager.Controls if(Extension == null) { this.Image = AppImage.CustomType; - this.Text = AppString.Text.SelectExtension; + this.Text = AppString.Dialog.SelectExtension; } else { this.Image = ResourceIcon.GetExtensionIcon(Extension)?.ToBitmap() ?? AppImage.NotFound; - this.Text = $"{AppString.Text.CurrentExtension}{Extension}"; + this.Text = $"{AppString.Item.CurrentExtension}{Extension}"; } } } diff --git a/ContextMenuManager/Controls/ShellNewList.cs b/ContextMenuManager/Controls/ShellNewList.cs index b91c8fd..3063832 100644 --- a/ContextMenuManager/Controls/ShellNewList.cs +++ b/ContextMenuManager/Controls/ShellNewList.cs @@ -24,6 +24,7 @@ namespace ContextMenuManager.Controls using(RegistryKey root = Registry.ClassesRoot) { extensions.AddRange(Array.FindAll(root.GetSubKeyNames(), keyName => keyName.StartsWith("."))); + if(Environment.OSVersion.Version.Major <= 6 && Environment.OSVersion.Version.Minor <= 1) extensions.Add("Briefcase");//Win7公文包 foreach(string extension in extensions) { string typeName = FileExtensionDialog.GetTypeName(extension, false); diff --git a/ContextMenuManager/Controls/ShellStoreDialog.cs b/ContextMenuManager/Controls/ShellStoreDialog.cs index 63c207e..d12989e 100644 --- a/ContextMenuManager/Controls/ShellStoreDialog.cs +++ b/ContextMenuManager/Controls/ShellStoreDialog.cs @@ -82,14 +82,15 @@ namespace ContextMenuManager.Controls "Windows.StartScan", "Windows.statusbar", "Windows.Sync", "Windows.SystemProperties", "Windows.taskbarpin", "Windows.ToggleRecycleConfirmations", "Windows.topviewrestoredefault", "Windows.Troubleshoot", "Windows.undo", "Windows.UpdatePrinterDriver", "Windows.v2.Powershell", "Windows.View.OptionsGallery", - "Windows.ViewRemotePrinters", "Windows.zip", "Windows.Zip.Action" + "Windows.ViewRemotePrinters", "Windows.zip", "Windows.Zip.Action", "Windows.librarypane", + "Windows.ManageDefaultPrinters", "Windows.ShareHomegroupFullAccess", "Windows.ShareHomegroupReadAccess" }; public List SelectedItemNames { get; private set; } = new List(); public ShellStoreForm() { - this.Text = AppString.Text.CheckReference; + this.Text = AppString.Dialog.CheckReference; btnOk.Click += (sender, e) => GetSelectedItems(); LoadItems(); } diff --git a/ContextMenuManager/Controls/ShellSubMenuDialog.cs b/ContextMenuManager/Controls/ShellSubMenuDialog.cs index 1330980..ce407f4 100644 --- a/ContextMenuManager/Controls/ShellSubMenuDialog.cs +++ b/ContextMenuManager/Controls/ShellSubMenuDialog.cs @@ -193,7 +193,7 @@ namespace ContextMenuManager.Controls private void WriteRegistry() { - SetValue(ParentPath, "SubCommands", string.Join(";", SubKeyNames)); + SetValue(ParentPath, "SubCommands", string.Join(";", SubKeyNames.ToArray())); } private static void MoveItem(MyListItem item, CommonMultiItemsList list, bool isUp) @@ -270,7 +270,7 @@ namespace ContextMenuManager.Controls public SeparatorItem(CommonMultiItemsList list) { this.Owner = list; - this.Text = AppString.Text.Separator; + this.Text = AppString.Item.Separator; this.Image = AppImage.Separator; BtnDelete = new DeleteButton(this); BtnMoveDown = new MoveButton(this, false); @@ -298,7 +298,7 @@ namespace ContextMenuManager.Controls public InvalidItem(CommonMultiItemsList list, string keyName) { this.Owner = list; - this.Text = $"{AppString.Text.InvalidItem} {keyName}"; + this.Text = $"{AppString.Item.InvalidItem} {keyName}"; this.Image = AppImage.NotFound.ToTransparent(); BtnDelete = new DeleteButton(this); BtnMoveDown = new MoveButton(this, false); diff --git a/ContextMenuManager/Controls/SubMenuModeForm.cs b/ContextMenuManager/Controls/SubMenuModeForm.cs index 8db9fc3..9686023 100644 --- a/ContextMenuManager/Controls/SubMenuModeForm.cs +++ b/ContextMenuManager/Controls/SubMenuModeForm.cs @@ -31,7 +31,7 @@ namespace ContextMenuManager.Controls readonly Label lblInfo = new Label { AutoSize = true, - Text = AppString.Text.SelectSubMenuMode, + Text = AppString.Dialog.SelectSubMenuMode, }; readonly Panel pnlTop = new Panel diff --git a/ContextMenuManager/MainForm.cs b/ContextMenuManager/MainForm.cs index 1fce117..cb6d03d 100644 --- a/ContextMenuManager/MainForm.cs +++ b/ContextMenuManager/MainForm.cs @@ -34,7 +34,7 @@ namespace ContextMenuManager readonly ThirdRulesList thirdRuleList = new ThirdRulesList(); readonly AboutAppBox aboutMeBox = new AboutAppBox { - Text = AppString.Text.AboutApp + Text = AppString.Other.AboutApp }; readonly DonateBox donateBox = new DonateBox(); readonly LanguagesBox languagesBox = new LanguagesBox(); diff --git a/ContextMenuManager/Program.cs b/ContextMenuManager/Program.cs index 9a2bf0c..2706a2a 100644 --- a/ContextMenuManager/Program.cs +++ b/ContextMenuManager/Program.cs @@ -60,12 +60,21 @@ namespace ContextMenuManager static Program() { Directory.CreateDirectory(AppDataConfigDir); - if(!DateTime.TryParse(ConfigReader.GetValue("General", "LastCheckUpdateTime"), out LastCheckUpdateTime)) + try + { + string time = ConfigReader.GetValue("General", "LastCheckUpdateTime"); + //二进制数据时间不会受系统时间格式影响 + LastCheckUpdateTime = DateTime.FromBinary(Convert.ToInt64(time)); + } + catch + { LastCheckUpdateTime = DateTime.Today.AddMonths(-2); + } if(LastCheckUpdateTime.AddMonths(1).CompareTo(DateTime.Today) < 0) { Updater.CheckUpdate(); - new IniFileHelper(ConfigIniPath).SetValue("General", "LastCheckUpdateTime", DateTime.Today.ToShortDateString()); + string time = DateTime.Today.ToBinary().ToString(); + new IniFileHelper(ConfigIniPath).SetValue("General", "LastCheckUpdateTime", time); } } } diff --git a/ContextMenuManager/Properties/Resources/Texts/AppLanguageDic.ini b/ContextMenuManager/Properties/Resources/Texts/AppLanguageDic.ini index 2c28e4d..50e4be9 100644 --- a/ContextMenuManager/Properties/Resources/Texts/AppLanguageDic.ini +++ b/ContextMenuManager/Properties/Resources/Texts/AppLanguageDic.ini @@ -64,7 +64,7 @@ Library = 所有库和库目录背景的右键菜单 New = 所有目录背景和桌面背景的右键 "新建" 的菜单项目 SendTo = 所有文件系统对象的右键 "发送到" 的菜单项目 OpenWith = 所有文件右键 "打开方式" 的菜单项目 -WinX = "开始" 按钮的右键Win+X菜单项目 +WinX = Win10 "开始" 按钮的右键Win+X菜单项目 LnkFile = 所有快捷方式的右键菜单 ExeFile = 所有EXE可执行文件的右键菜单 @@ -106,6 +106,48 @@ Delete = 删除此项 DeleteReference = 删除引用 CopyGuid = 复制guid 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 = 取消 +Browse = 浏览 +Program = 程序 +NewShellItem = 新建Shell类型右键菜单项目 +NewSendToItem = 新建发送到子菜单项目 +NewOpenWithItem = 新建打开方式菜单项目 +ItemText = 菜单文本 +ItemCommand = 菜单命令 +SingleMenu = 一级 +MultiMenu = 多级 +InputGuid = 输入Guid +SelectExtension = 请选择一个文件扩展名 +CheckReference = 请勾选你想要添加引用的菜单项目 +CheckCommon = 请勾选你想要添加的常用菜单项目 +SelectSubMenuMode = 当前多级菜单子项目数为0, 你有两个选择:\n①该多级菜单的所有子菜单项目私有,\n②该多级菜单可与其他多级菜单引用相同子项,\n请做出你的选择. [MessageBox] TextCannotBeEmpty = 菜单文本不能为空! @@ -127,13 +169,13 @@ EditInitialData = 仅支持纯文本文件(如.txt、.bat),\n如需写入二进 PromptIsOpenItem = 该项为"打开"菜单,\n盲目操作可能会导致无法打开文件或文件夹,\n请确认是否继续操作?(不建议) RestartApp = 程序将会重新启动! UpdateApp = 当前有更新, 是否前往下载?\n更新信息: 版本号 +FileOrFolderNotExists = 文件或文件夹不存在! [Tip] RestartExplorer = 重启Explorer会使桌面闪烁片刻, 正常现象无需担心,\n或者你也可以稍后重启或注销计算机使你的操作生效 CustomFolder = 禁用此项将会同时禁用文件系统\n对象属性面板中的自定义选项卡 SendToDrive = 仅当插入可移动磁盘时有作用,\n显示该可移动磁盘的所有分区 BuildSendtoMenu = 禁用此项将加快主菜单弹出速度\n但会延缓发送到子菜单弹出速度 -UseStoreOpenWith = 仅适用于Win10 Microsoft Store InvalidItem = 无效菜单项目将导致此项以下的\n所有菜单项目不可见(建议删除) EditSubItems = 编辑子菜单项目 AddExistingItems = 添加对现有项目的引用 @@ -141,29 +183,7 @@ AddSeparator = 添加分隔线 Separator = 项目分隔线 AddCommonItems = 添加常用菜单项目 -[Text] -NewItem = 新建一个菜单项目 -NewShellItem = 新建Shell类型右键菜单项目 -NewSendToItem = 新建发送到子菜单项目 -NewOpenWithItem = 新建打开方式菜单项目 -NewGuidBlockedItem = 新建GUID锁定项目 -Explore = 浏览 -CustomFolder = 自定义文件夹(&F)... -BuildSendtoMenu = 快速构建发送到子菜单 -UseStoreOpenWith = 在Microsoft Store中查找应用 -RestartExplorer = 当前部分操作需要重启文件资源管理器生效 -ItemName = 菜单名称 -ItemCommand = 菜单命令 -Single = 一级 -Multi = 多级 -SelectExtension = 请选择一个文件扩展名 -CurrentExtension = 你当前选择的文件格式为 -EditSubItems = 编辑 "%s" 的子菜单项目 -InvalidItem = 无效菜单项目: -Separator = ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ -CheckReference = 请勾选你想要添加引用的菜单项目 -CheckCommon = 请勾选你想要添加的常用菜单项目 -InputGuid = 输入Guid +[Other] DictionaryDescription = 字典说明 LanguageDictionary = 程序语言 GuidInfosDictionary = GUID信息 @@ -171,9 +191,9 @@ ThridRulesDictionary = 三方规则 CommonItemsDictionary = 常用菜单 Translators = 翻译贡献者 OtherLanguages = 下载或上传其他语言文件 -SelectSubMenuMode = 当前多级菜单子项目数为0, 你有两个选择:\n①该多级菜单的所有子菜单项目私有,\n②该多级菜单可与其他多级菜单引用相同子项,\n请做出你的选择. +RestartExplorer = 当前部分操作需要重启文件资源管理器生效 -AboutApp = 【主要功能】\n 1.管理常见右键菜单\n 2.自定义添加右键菜单\n\n【兼容性能】\n 1.适用于Windows 64位、32位系统\n 2.适配高分屏,最佳缩放比为150%\n 3.依赖框架.Net Framework 4.6(Win10自带,Win7须安装4.6以上版本)\n .Net Framework下载:https://dotnet.microsoft.com/download/dotnet-framework/ \n\n【代码开源】\n 1.代码语言:C Sharp, Winform程序\n 2.Github项目:https://github.com/BluePointLilac/ContextMenuManager \n 3.Gitee项目:https://gitee.com/BluePointLilac/ContextMenuManager \n 4.使用本程序的源代码请遵守MIT开源协议\n\n【联系作者】\n 1.程序由我个人独立开发,当然也要感谢萌研社 @坑晨 平时的答疑解惑,能力有限,\n 难免出现一些Bug,欢迎大家反馈Bug和提出建议\n 2.个人B站ID:蓝点lilac https://space.bilibili.com/34492771 (欢迎大家关注我!)\n 3.个人邮箱:1617859183@qq.com\n\n【程序图标】\n 1.程序主图标来自 https://www.easyicon.net/1208132-mouse_icon.html \n 2.程序使用到的按钮图标主要来自 https://www.iconfont.cn/ \n\n【温馨提示】\n 1.每个右键管理程序禁用菜单方法可能不同, 建议不要同时使用多个右键菜单管理程序,\n 大部分程序使用简单暴力的备份-删除法, 此程序尽可能使用了系统提供的键值进行隐藏操作,\n 若之前使用过其他程序禁用菜单项,请先使用对应程序还原, 不然可能无法在此程序中看到它.\n 2.此程序不用于清理未卸载干净的程序,但可帮助你定位菜单项相关注册表和文件位置,\n 你可根据相关内容进行你的操作,如果你是一个电脑小白,建议只碰启用\禁用开关. +AboutApp = 【主要功能】\n 1.管理常见位置右键菜单\n 2.自定义添加右键菜单\n\n【兼容性能】\n 1.适用于Win7、win10,兼容64位和32位系统\n 2.适配高分屏,最佳缩放比为150%\n\n【代码开源】\n 1.代码语言:C Sharp, Winform程序\n 2.Github项目:https://github.com/BluePointLilac/ContextMenuManager \n 3.Gitee项目:https://gitee.com/BluePointLilac/ContextMenuManager \n 4.使用本程序的源代码请遵守MIT开源协议\n\n【联系作者】\n 1.程序由我个人独立开发,当然也要感谢萌研社 @坑晨 平时的答疑解惑,能力有限,\n 难免出现一些Bug,欢迎大家反馈Bug和提出建议\n 2.个人B站ID:蓝点lilac https://space.bilibili.com/34492771 (欢迎大家关注我!)\n 3.个人邮箱:1617859183@qq.com\n\n【程序图标】\n 1.程序主图标来自 https://www.easyicon.net/1208132-mouse_icon.html \n 2.程序使用到的按钮图标主要来自 https://www.iconfont.cn/ \n\n【程序更新】\n 1.程序有检查更新功能,除了更新程序本身还会更新字典,下载完成后直接覆盖原文件即可\n 2.由于Github Raw被墙,Gitee Raw有每月次数访问上限,程序设置为每月检测一次更新,\n 大家也可以自己浏览Github Releases栏或Gitee 发行版栏检查是否有更新 \n\n【温馨提示】\n 1.一些特殊菜单项可能会受到其他因素影响导致不会显示在右键菜单中,\n 但是按照程序使用的通用规则在此程序中仍会显示为启用,这是正常的现象。\n 2.每个右键管理程序禁用菜单方法可能不同, 建议不要同时使用多个右键菜单管理程序,\n 大部分程序使用简单暴力的备份-删除法, 此程序尽可能使用了系统提供的键值进行隐藏操作,\n 若之前使用过其他程序禁用菜单项,请先使用对应程序还原, 不然可能无法在此程序中看到它。\n 3.此程序不用于清理未卸载干净的程序,但可帮助你定位菜单项相关注册表和文件位置,\n 你可根据相关内容进行你的操作,如果你是一个电脑小白,建议只碰启用\禁用开关。 Dictionaries = 【字典说明】\n 此程序拥有几个字典文件\n 如果想为此程序添加字典可右键保存字典文件, 并按照文件内相关说明进行添加\n 右侧选项卡中为原始字典内容, 你可以切换选项卡进行查看\n\n【字典内容】\n 1.程序显示文本语言字典 (languages目录)\n 2.ShellEx菜单项GUID文本图标字典 (GuidInfosDic.ini)\n 3.第三方程序菜单内部设置字典 (ThirdRulesDic.xml)\n 4.常用菜单项目字典 (ShellCommonDic.xml) diff --git a/ContextMenuManager/Properties/Resources/Texts/GuidInfosDic.ini b/ContextMenuManager/Properties/Resources/Texts/GuidInfosDic.ini index a16c892..f24befa 100644 --- a/ContextMenuManager/Properties/Resources/Texts/GuidInfosDic.ini +++ b/ContextMenuManager/Properties/Resources/Texts/GuidInfosDic.ini @@ -46,9 +46,8 @@ Icon=msdt.exe,0 ;播放到设备 [7ad84985-87b4-4a16-be58-8b72a5b390f7] Text=@playtomenu.dll,-101 -;向左、向右旋转 [ffe2a43c-56b9-4bf5-9a79-cc6d4285608a] -Text=@*,-3028 +Text=向左、向右旋转 ;设置为桌面背景 [ff609cc7-d34d-4049-a1aa-2293517ffcc6] Icon=imageres.dll,-5346 @@ -64,17 +63,15 @@ Icon=imageres.dll,-5340 [f3d06e7c-1e45-4a26-847e-f9fcdee59be0] Text=@*,-30328 Icon=imageres.dll,-5302 -;包含到库中(&I) [3dad6c5d-2167-4cae-9914-f99e41c12cfa] -Text=@*,-34593 +Text=包含到库中(&I) Icon=imageres.dll,-1001 ;固定到"开始"屏幕(&P) [470C0EBD-5D73-4d58-9CED-E91E22E23282] Text=@shell32.dll,-51201 Icon=imageres.dll,-5376 -;固定到“开始”列表(&L) [a2a9545d-a0c2-42b4-9708-a0b2badd77c8] -Text=@*,-51395 +Text=附到「开始」菜单(&U) Icon=imageres.dll,75 ;Text=发送到(&N) [7BA4C740-9E81-11CF-99D3-00AA004AE837] @@ -88,9 +85,10 @@ Icon=imageres.dll,-5346 [D969A300-E7FF-11d0-A93B-00A0C90F2719] Text=@*,-95851 Icon=imageres.dll,-5307 -;加密(&Y) +[6b9228da-9c15-419e-856c-19e768a13bdc] +Text=Windows 小工具 [A470F8CF-A1E8-4f65-8335-227475AA5C46] -Text=@*,-28954 +Text=加密(&Y) Icon=imageres.dll,54 ;共享 [e2bf9676-5f8f-435c-97eb-11607a5bedf7] @@ -113,16 +111,20 @@ Text=@*,-101 [fbeb8a05-beee-4442-804e-409d6c4515e9] Text=@*,-12560 Icon=imageres.dll,25 +[59099400-57ff-11ce-bd94-0020af85b590] +Text=复制磁盘(&Y)... ;便携设备菜单 [D6791A63-E7E2-4fee-BF52-5DED8E86E9B8] Text=@*,-511 -;在导航窗格中显示 [0af96ede-aebf-41ed-a1c8-cf7a685505b6] -Text=@*,-34618 +Text=不在导航窗格中显示 Icon=imageres.dll,-5359 ;还原以前的版本(&V) [596AB062-B4D2-4215-9F74-E9109B0A8153] Text=@*,-1037 +;公文包 +[85bbd920-42a0-1069-a2e4-08002b30309d] +Text=@shell32.dll,-22978 ;复制到文件夹(&F)... [c2fbb630-2971-11d1-a18c-00c04fd75d13] Text=@*,-30304 @@ -145,23 +147,20 @@ Icon=nvcpl.dll,0 [e97dec16-a50d-49bb-ae24-cf682282e08d] Text=@nv3dappshextr.dll,-109 Icon=nvcpl.dll,0 -;NVIDIA 控制面板 [3D1975AF-48C6-4f8e-A182-BE0E08FA86A9] -Text=@%ProgramFiles%\NVIDIA Corporation\Control Panel Client\nvcpluir.dll,-110 +Text=NVIDIA 控制面板 Icon=nvcpl.dll,0 [9B5F5829-A529-4B12-814A-E81BCB8D93FC] Text=英特尔® 显卡设置 Icon=.\Gfxv4_0.exe,0 ;使用 Microsoft Defender扫描... [09A47860-11B0-4DA5-AFA5-26D86198A780] -Text=@shell32.dll,-50257 +Text=Microsoft Defender Icon=.\EppManifest.dll,0 -;使用火绒安全进行杀毒 [18A3E590-F219-4105-9079-93DAFA51B9D6] -Text=@*,-103 -;使用火绒安全粉碎文件 +Text=使用火绒安全进行杀毒 [9F012318-CAA5-402C-9BF6-28EB36F61496] -Text=@*,-102 +Text=使用火绒安全粉碎文件 [53D2405C-48AB-4C8A-8F59-CE0610F13BBC] Text=通过QQ发送到 [9B6D38F3-8EF4-48A5-AD30-FFFFFFFFFFFF] diff --git a/Update.ini b/Update.ini index 58015d9..699d77e 100644 --- a/Update.ini +++ b/Update.ini @@ -1,4 +1,4 @@ [Update] -Version=1.0.0.0 -Url= -Info= \ No newline at end of file +Version=2.0.0.0 +Url=https://github.com/BluePointLilac/ContextMenuManager/releases/download/2.0.0.0/ContextMenuManager.zip +Info=优化部分代码,添加部分GUID字典\n适配Win7系统(依赖框架.Net Framework 3.5,Win7自带无需另外安装)\nWin10版依赖框架为.Net Framework 4.6,Win10自带无需安装\n可单独下载对应系统版本.exe文件,或下载.zip包解压后仅保留对应系统的版本 \ No newline at end of file diff --git a/languages/zh-CN.ini b/languages/zh-CN.ini index 2c28e4d..50e4be9 100644 --- a/languages/zh-CN.ini +++ b/languages/zh-CN.ini @@ -64,7 +64,7 @@ Library = 所有库和库目录背景的右键菜单 New = 所有目录背景和桌面背景的右键 "新建" 的菜单项目 SendTo = 所有文件系统对象的右键 "发送到" 的菜单项目 OpenWith = 所有文件右键 "打开方式" 的菜单项目 -WinX = "开始" 按钮的右键Win+X菜单项目 +WinX = Win10 "开始" 按钮的右键Win+X菜单项目 LnkFile = 所有快捷方式的右键菜单 ExeFile = 所有EXE可执行文件的右键菜单 @@ -106,6 +106,48 @@ Delete = 删除此项 DeleteReference = 删除引用 CopyGuid = 复制guid 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 = 取消 +Browse = 浏览 +Program = 程序 +NewShellItem = 新建Shell类型右键菜单项目 +NewSendToItem = 新建发送到子菜单项目 +NewOpenWithItem = 新建打开方式菜单项目 +ItemText = 菜单文本 +ItemCommand = 菜单命令 +SingleMenu = 一级 +MultiMenu = 多级 +InputGuid = 输入Guid +SelectExtension = 请选择一个文件扩展名 +CheckReference = 请勾选你想要添加引用的菜单项目 +CheckCommon = 请勾选你想要添加的常用菜单项目 +SelectSubMenuMode = 当前多级菜单子项目数为0, 你有两个选择:\n①该多级菜单的所有子菜单项目私有,\n②该多级菜单可与其他多级菜单引用相同子项,\n请做出你的选择. [MessageBox] TextCannotBeEmpty = 菜单文本不能为空! @@ -127,13 +169,13 @@ EditInitialData = 仅支持纯文本文件(如.txt、.bat),\n如需写入二进 PromptIsOpenItem = 该项为"打开"菜单,\n盲目操作可能会导致无法打开文件或文件夹,\n请确认是否继续操作?(不建议) RestartApp = 程序将会重新启动! UpdateApp = 当前有更新, 是否前往下载?\n更新信息: 版本号 +FileOrFolderNotExists = 文件或文件夹不存在! [Tip] RestartExplorer = 重启Explorer会使桌面闪烁片刻, 正常现象无需担心,\n或者你也可以稍后重启或注销计算机使你的操作生效 CustomFolder = 禁用此项将会同时禁用文件系统\n对象属性面板中的自定义选项卡 SendToDrive = 仅当插入可移动磁盘时有作用,\n显示该可移动磁盘的所有分区 BuildSendtoMenu = 禁用此项将加快主菜单弹出速度\n但会延缓发送到子菜单弹出速度 -UseStoreOpenWith = 仅适用于Win10 Microsoft Store InvalidItem = 无效菜单项目将导致此项以下的\n所有菜单项目不可见(建议删除) EditSubItems = 编辑子菜单项目 AddExistingItems = 添加对现有项目的引用 @@ -141,29 +183,7 @@ AddSeparator = 添加分隔线 Separator = 项目分隔线 AddCommonItems = 添加常用菜单项目 -[Text] -NewItem = 新建一个菜单项目 -NewShellItem = 新建Shell类型右键菜单项目 -NewSendToItem = 新建发送到子菜单项目 -NewOpenWithItem = 新建打开方式菜单项目 -NewGuidBlockedItem = 新建GUID锁定项目 -Explore = 浏览 -CustomFolder = 自定义文件夹(&F)... -BuildSendtoMenu = 快速构建发送到子菜单 -UseStoreOpenWith = 在Microsoft Store中查找应用 -RestartExplorer = 当前部分操作需要重启文件资源管理器生效 -ItemName = 菜单名称 -ItemCommand = 菜单命令 -Single = 一级 -Multi = 多级 -SelectExtension = 请选择一个文件扩展名 -CurrentExtension = 你当前选择的文件格式为 -EditSubItems = 编辑 "%s" 的子菜单项目 -InvalidItem = 无效菜单项目: -Separator = ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ -CheckReference = 请勾选你想要添加引用的菜单项目 -CheckCommon = 请勾选你想要添加的常用菜单项目 -InputGuid = 输入Guid +[Other] DictionaryDescription = 字典说明 LanguageDictionary = 程序语言 GuidInfosDictionary = GUID信息 @@ -171,9 +191,9 @@ ThridRulesDictionary = 三方规则 CommonItemsDictionary = 常用菜单 Translators = 翻译贡献者 OtherLanguages = 下载或上传其他语言文件 -SelectSubMenuMode = 当前多级菜单子项目数为0, 你有两个选择:\n①该多级菜单的所有子菜单项目私有,\n②该多级菜单可与其他多级菜单引用相同子项,\n请做出你的选择. +RestartExplorer = 当前部分操作需要重启文件资源管理器生效 -AboutApp = 【主要功能】\n 1.管理常见右键菜单\n 2.自定义添加右键菜单\n\n【兼容性能】\n 1.适用于Windows 64位、32位系统\n 2.适配高分屏,最佳缩放比为150%\n 3.依赖框架.Net Framework 4.6(Win10自带,Win7须安装4.6以上版本)\n .Net Framework下载:https://dotnet.microsoft.com/download/dotnet-framework/ \n\n【代码开源】\n 1.代码语言:C Sharp, Winform程序\n 2.Github项目:https://github.com/BluePointLilac/ContextMenuManager \n 3.Gitee项目:https://gitee.com/BluePointLilac/ContextMenuManager \n 4.使用本程序的源代码请遵守MIT开源协议\n\n【联系作者】\n 1.程序由我个人独立开发,当然也要感谢萌研社 @坑晨 平时的答疑解惑,能力有限,\n 难免出现一些Bug,欢迎大家反馈Bug和提出建议\n 2.个人B站ID:蓝点lilac https://space.bilibili.com/34492771 (欢迎大家关注我!)\n 3.个人邮箱:1617859183@qq.com\n\n【程序图标】\n 1.程序主图标来自 https://www.easyicon.net/1208132-mouse_icon.html \n 2.程序使用到的按钮图标主要来自 https://www.iconfont.cn/ \n\n【温馨提示】\n 1.每个右键管理程序禁用菜单方法可能不同, 建议不要同时使用多个右键菜单管理程序,\n 大部分程序使用简单暴力的备份-删除法, 此程序尽可能使用了系统提供的键值进行隐藏操作,\n 若之前使用过其他程序禁用菜单项,请先使用对应程序还原, 不然可能无法在此程序中看到它.\n 2.此程序不用于清理未卸载干净的程序,但可帮助你定位菜单项相关注册表和文件位置,\n 你可根据相关内容进行你的操作,如果你是一个电脑小白,建议只碰启用\禁用开关. +AboutApp = 【主要功能】\n 1.管理常见位置右键菜单\n 2.自定义添加右键菜单\n\n【兼容性能】\n 1.适用于Win7、win10,兼容64位和32位系统\n 2.适配高分屏,最佳缩放比为150%\n\n【代码开源】\n 1.代码语言:C Sharp, Winform程序\n 2.Github项目:https://github.com/BluePointLilac/ContextMenuManager \n 3.Gitee项目:https://gitee.com/BluePointLilac/ContextMenuManager \n 4.使用本程序的源代码请遵守MIT开源协议\n\n【联系作者】\n 1.程序由我个人独立开发,当然也要感谢萌研社 @坑晨 平时的答疑解惑,能力有限,\n 难免出现一些Bug,欢迎大家反馈Bug和提出建议\n 2.个人B站ID:蓝点lilac https://space.bilibili.com/34492771 (欢迎大家关注我!)\n 3.个人邮箱:1617859183@qq.com\n\n【程序图标】\n 1.程序主图标来自 https://www.easyicon.net/1208132-mouse_icon.html \n 2.程序使用到的按钮图标主要来自 https://www.iconfont.cn/ \n\n【程序更新】\n 1.程序有检查更新功能,除了更新程序本身还会更新字典,下载完成后直接覆盖原文件即可\n 2.由于Github Raw被墙,Gitee Raw有每月次数访问上限,程序设置为每月检测一次更新,\n 大家也可以自己浏览Github Releases栏或Gitee 发行版栏检查是否有更新 \n\n【温馨提示】\n 1.一些特殊菜单项可能会受到其他因素影响导致不会显示在右键菜单中,\n 但是按照程序使用的通用规则在此程序中仍会显示为启用,这是正常的现象。\n 2.每个右键管理程序禁用菜单方法可能不同, 建议不要同时使用多个右键菜单管理程序,\n 大部分程序使用简单暴力的备份-删除法, 此程序尽可能使用了系统提供的键值进行隐藏操作,\n 若之前使用过其他程序禁用菜单项,请先使用对应程序还原, 不然可能无法在此程序中看到它。\n 3.此程序不用于清理未卸载干净的程序,但可帮助你定位菜单项相关注册表和文件位置,\n 你可根据相关内容进行你的操作,如果你是一个电脑小白,建议只碰启用\禁用开关。 Dictionaries = 【字典说明】\n 此程序拥有几个字典文件\n 如果想为此程序添加字典可右键保存字典文件, 并按照文件内相关说明进行添加\n 右侧选项卡中为原始字典内容, 你可以切换选项卡进行查看\n\n【字典内容】\n 1.程序显示文本语言字典 (languages目录)\n 2.ShellEx菜单项GUID文本图标字典 (GuidInfosDic.ini)\n 3.第三方程序菜单内部设置字典 (ThirdRulesDic.xml)\n 4.常用菜单项目字典 (ShellCommonDic.xml)