| 
					
				 | 
			
			
				@@ -8,7 +8,7 @@ using System.Windows.Forms; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 namespace ContextMenuManager.Controls 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    sealed class ShellExItem : MyListItem, IChkVisibleItem, IBtnShowMenuItem, IFoldSubItem, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    sealed class ShellExItem : MyListItem, IChkVisibleItem, IBtnShowMenuItem, IFoldSubItem, ITsiGuidItem, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ITsiWebSearchItem, ITsiFilePathItem, ITsiRegPathItem, ITsiRegDeleteItem, ITsiRegExportItem 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public static Dictionary<string, Guid> GetPathAndGuids(string shellExPath, bool isDragDrop = false) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -68,8 +68,8 @@ namespace ContextMenuManager.Controls 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private string ShellExPath => RegistryEx.GetParentPath(ParentPath); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private string ParentKeyName => RegistryEx.GetKeyName(ParentPath); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private string DefaultValue => Registry.GetValue(RegPath, "", null)?.ToString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        public string ItemText => GuidInfo.GetText(Guid) ?? ((Guid.ToString("B") == KeyName) ? DefaultValue : KeyName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        private GuidInfo.IconLocation IconLocation => GuidInfo.GetIconLocation(this.Guid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public string ItemText => GuidInfo.GetText(Guid) ?? (KeyName.Equals(Guid.ToString("B"), StringComparison.OrdinalIgnoreCase) ? DefaultValue : KeyName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private GuidInfo.IconLocation IconLocation => GuidInfo.GetIconLocation(Guid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private bool IsOpenLnkItem => Guid.ToString() == LnkOpenGuid; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public bool IsDragDropItem => ParentKeyName.EndsWith(DdhParts[0], StringComparison.OrdinalIgnoreCase); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -114,12 +114,9 @@ namespace ContextMenuManager.Controls 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public DeleteMeMenuItem TsiDeleteMe { get; set; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public RegExportMenuItem TsiRegExport { get; set; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public IFoldGroupItem FoldGroupItem { get; set; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public HandleGuidMenuItem TsiHandleGuid { get; set; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         readonly ToolStripMenuItem TsiDetails = new ToolStripMenuItem(AppString.Menu.Details); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        readonly ToolStripMenuItem TsiHandleGuid = new ToolStripMenuItem(AppString.Menu.HandleGuid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        readonly ToolStripMenuItem TsiCopyGuid = new ToolStripMenuItem(AppString.Menu.CopyGuid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        readonly ToolStripMenuItem TsiBlockGuid = new ToolStripMenuItem(AppString.Menu.BlockGuid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        readonly ToolStripMenuItem TsiAddGuidDic = new ToolStripMenuItem(AppString.Menu.AddGuidDic); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private void InitializeComponents() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -131,129 +128,15 @@ namespace ContextMenuManager.Controls 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             TsiRegLocation = new RegLocationMenuItem(this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             TsiRegExport = new RegExportMenuItem(this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             TsiDeleteMe = new DeleteMeMenuItem(this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            TsiHandleGuid = new HandleGuidMenuItem(this, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ContextMenuStrip.Items.AddRange(new ToolStripItem[] { TsiHandleGuid, new ToolStripSeparator(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 TsiDetails, new ToolStripSeparator(), TsiDeleteMe }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            TsiHandleGuid.DropDownItems.AddRange(new ToolStripItem[] { TsiCopyGuid, new ToolStripSeparator(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                TsiBlockGuid, new ToolStripSeparator(), TsiAddGuidDic }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             TsiDetails.DropDownItems.AddRange(new ToolStripItem[] { TsiSearch, new ToolStripSeparator(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 TsiFileProperties, TsiFileLocation, TsiRegLocation, TsiRegExport}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ContextMenuStrip.Opening += (sender, e) => RefreshMenuItem(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            TsiCopyGuid.Click += (sender, e) => CopyGuid(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            TsiBlockGuid.Click += (sender, e) => BlockGuid(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            TsiAddGuidDic.Click += (sender, e) => AddGuidDic(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        private void CopyGuid() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            Clipboard.SetText(Guid.ToString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            MessageBoxEx.Show($"{AppString.MessageBox.CopiedToClipboard}\n{Guid}", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                MessageBoxButtons.OK, MessageBoxIcon.Information); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        private void BlockGuid() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            foreach(string path in GuidBlockedItem.BlockedPaths) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if(TsiBlockGuid.Checked) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    RegistryEx.DeleteValue(path, this.Guid.ToString("B")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    Registry.SetValue(path, this.Guid.ToString("B"), string.Empty); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ExplorerRestarter.Show(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        private void AddGuidDic() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            using(AddGuidDicDialog dlg = new AddGuidDicDialog()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                dlg.ItemName = this.Text; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                dlg.ItemIcon = this.Image; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                dlg.ItemIconPath = this.IconLocation.IconPath; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                dlg.ItemIconIndex = this.IconLocation.IconIndex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                IniWriter writer = new IniWriter 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    FilePath = AppConfig.UserGuidInfosDic, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    DeleteFileWhenEmpty = true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                string section = this.Guid.ToString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if(dlg.ShowDialog() != DialogResult.OK) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if(dlg.IsDelete) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        writer.DeleteSection(section); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        GuidInfo.ItemTextDic.Remove(this.Guid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        GuidInfo.ItemImageDic.Remove(this.Guid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        GuidInfo.IconLocationDic.Remove(this.Guid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        GuidInfo.UserDic.RootDic.Remove(section); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        this.Text = this.ItemText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        this.Image = GuidInfo.GetImage(Guid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                string name = ResourceString.GetDirectString(dlg.ItemName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if(!name.IsNullOrWhiteSpace()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    writer.SetValue(section, "Text", dlg.ItemName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    this.Text = name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if(GuidInfo.ItemTextDic.ContainsKey(this.Guid)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        GuidInfo.ItemTextDic[this.Guid] = this.Text; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        GuidInfo.ItemTextDic.Add(this.Guid, this.Text); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    MessageBoxEx.Show(AppString.MessageBox.StringParsingFailed); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if(dlg.ItemIconLocation != null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    writer.SetValue(section, "Icon", dlg.ItemIconLocation); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    var location = new GuidInfo.IconLocation { IconPath = dlg.ItemIconPath, IconIndex = dlg.ItemIconIndex }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if(GuidInfo.IconLocationDic.ContainsKey(this.Guid)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        GuidInfo.IconLocationDic[this.Guid] = location; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        GuidInfo.IconLocationDic.Add(this.Guid, location); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    this.Image = dlg.ItemIcon; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if(GuidInfo.ItemImageDic.ContainsKey(this.Guid)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        GuidInfo.ItemImageDic[this.Guid] = this.Image; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        GuidInfo.ItemImageDic.Add(this.Guid, this.Image); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        private void RefreshMenuItem() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            TsiDeleteMe.Enabled = !(IsOpenLnkItem && AppConfig.ProtectOpenItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            TsiBlockGuid.Checked = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            foreach(string path in GuidBlockedItem.BlockedPaths) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if(Registry.GetValue(path, this.Guid.ToString("B"), null) != null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    TsiBlockGuid.Checked = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ContextMenuStrip.Opening += (sender, e) => TsiDeleteMe.Enabled = !(IsOpenLnkItem && AppConfig.ProtectOpenItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private bool TryProtectOpenItem() 
			 |