ThirdRulesList.cs 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. using BluePointLilac.Controls;
  2. using BluePointLilac.Methods;
  3. using ContextMenuManager.Controls.Interfaces;
  4. using Microsoft.Win32;
  5. using System;
  6. using System.IO;
  7. using System.Xml;
  8. namespace ContextMenuManager.Controls
  9. {
  10. sealed class ThirdRulesList : MyList
  11. {
  12. public void LoadItems()
  13. {
  14. try
  15. {
  16. XmlDocument doc = AppDic.ReadXml(AppConfig.WebThirdRulesDic,
  17. AppConfig.UserThirdRulesDic, Properties.Resources.ThirdRulesDic);
  18. foreach(XmlElement groupXE in doc.DocumentElement.ChildNodes)
  19. {
  20. Guid guid = Guid.Empty;
  21. if(groupXE.HasAttribute("Guid"))
  22. {
  23. if(GuidEx.TryParse(groupXE.GetAttribute("Guid"), out guid))
  24. {
  25. if(!File.Exists(GuidInfo.GetFilePath(guid))) continue;
  26. }
  27. else continue;
  28. }
  29. GroupPathItem groupItem;
  30. bool isIniGroup = groupXE.HasAttribute("IsIniGroup");
  31. string attribute = isIniGroup ? "FilePath" : "RegPath";
  32. ObjectPath.PathType pathType = isIniGroup ? ObjectPath.PathType.File : ObjectPath.PathType.Registry;
  33. groupItem = new GroupPathItem(groupXE.GetAttribute(attribute), pathType)
  34. {
  35. Text = groupXE.GetAttribute("Text"),
  36. Image = GuidInfo.GetImage(guid)
  37. };
  38. if(groupItem.Text.IsNullOrWhiteSpace()) groupItem.Text = GuidInfo.GetText(guid);
  39. this.AddItem(groupItem);
  40. string GetRuleFullRegPath(string regPath)
  41. {
  42. if(string.IsNullOrEmpty(regPath)) regPath = groupItem.TargetPath;
  43. else if(regPath.StartsWith("\\")) regPath = groupItem.TargetPath + regPath;
  44. return regPath;
  45. };
  46. foreach(XmlElement itemXE in groupXE.ChildNodes)
  47. {
  48. if(!EnhanceMenusList.JudgeOSVersion(itemXE)) continue;
  49. RuleItem ruleItem;
  50. ItemInfo info = new ItemInfo
  51. {
  52. Text = itemXE.GetAttribute("Text"),
  53. Tip = itemXE.GetAttribute("Tip"),
  54. RestartExplorer = itemXE.HasAttribute("RestartExplorer"),
  55. };
  56. int defaultValue = 0, maxValue = 0, minValue = 0;
  57. if(itemXE.HasAttribute("IsNumberItem"))
  58. {
  59. XmlElement ruleXE = (XmlElement)itemXE.SelectSingleNode("Rule");
  60. defaultValue = ruleXE.HasAttribute("Default") ? Convert.ToInt32(ruleXE.GetAttribute("Default")) : 0;
  61. maxValue = ruleXE.HasAttribute("Max") ? Convert.ToInt32(ruleXE.GetAttribute("Max")) : int.MaxValue;
  62. minValue = ruleXE.HasAttribute("Min") ? Convert.ToInt32(ruleXE.GetAttribute("Min")) : int.MinValue;
  63. }
  64. if(isIniGroup)
  65. {
  66. XmlElement ruleXE = (XmlElement)itemXE.SelectSingleNode("Rule");
  67. string iniPath = ruleXE.GetAttribute("FilePath");
  68. if(iniPath.IsNullOrWhiteSpace()) iniPath = groupItem.TargetPath;
  69. string section = ruleXE.GetAttribute("Section");
  70. string keyName = ruleXE.GetAttribute("KeyName");
  71. if(itemXE.HasAttribute("IsNumberItem"))
  72. {
  73. var rule = new NumberIniRuleItem.IniRule
  74. {
  75. IniPath = iniPath,
  76. Section = section,
  77. KeyName = keyName,
  78. DefaultValue = defaultValue,
  79. MaxValue = maxValue,
  80. MinValue = maxValue
  81. };
  82. ruleItem = new NumberIniRuleItem(rule, info);
  83. }
  84. else if(itemXE.HasAttribute("IsStringItem"))
  85. {
  86. var rule = new StringIniRuleItem.IniRule
  87. {
  88. IniPath = iniPath,
  89. Secation = section,
  90. KeyName = keyName
  91. };
  92. ruleItem = new StringIniRuleItem(rule, info);
  93. }
  94. else
  95. {
  96. var rule = new VisbleIniRuleItem.IniRule
  97. {
  98. IniPath = iniPath,
  99. Section = section,
  100. KeyName = keyName,
  101. TurnOnValue = ruleXE.HasAttribute("On") ? ruleXE.GetAttribute("On") : null,
  102. TurnOffValue = ruleXE.HasAttribute("Off") ? ruleXE.GetAttribute("Off") : null,
  103. };
  104. ruleItem = new VisbleIniRuleItem(rule, info);
  105. }
  106. }
  107. else
  108. {
  109. if(itemXE.HasAttribute("IsNumberItem"))
  110. {
  111. XmlElement ruleXE = (XmlElement)itemXE.SelectSingleNode("Rule");
  112. var rule = new NumberRegRuleItem.RegRule
  113. {
  114. RegPath = GetRuleFullRegPath(ruleXE.GetAttribute("RegPath")),
  115. ValueName = ruleXE.GetAttribute("ValueName"),
  116. ValueKind = GetValueKind(ruleXE.GetAttribute("ValueKind")),
  117. DefaultValue = defaultValue,
  118. MaxValue = maxValue,
  119. MinValue = minValue
  120. };
  121. ruleItem = new NumberRegRuleItem(rule, info);
  122. }
  123. else if(itemXE.HasAttribute("IsStringItem"))
  124. {
  125. XmlElement ruleXE = (XmlElement)itemXE.SelectSingleNode("Rule");
  126. var rule = new StringRegRuleItem.RegRule
  127. {
  128. RegPath = GetRuleFullRegPath(ruleXE.GetAttribute("RegPath")),
  129. ValueName = ruleXE.GetAttribute("ValueName"),
  130. };
  131. ruleItem = new StringRegRuleItem(rule, info);
  132. }
  133. else
  134. {
  135. XmlNodeList ruleXNList = itemXE.SelectNodes("Rule");
  136. var rules = new VisibleRegRuleItem.RegRule[ruleXNList.Count];
  137. for(int i = 0; i < ruleXNList.Count; i++)
  138. {
  139. XmlElement ruleXE = (XmlElement)ruleXNList[i];
  140. rules[i] = new VisibleRegRuleItem.RegRule
  141. {
  142. RegPath = GetRuleFullRegPath(ruleXE.GetAttribute("RegPath")),
  143. ValueName = ruleXE.GetAttribute("ValueName"),
  144. ValueKind = GetValueKind(ruleXE.GetAttribute("ValueKind")),
  145. TurnOnValue = ruleXE.HasAttribute("On") ? ruleXE.GetAttribute("On") : null,
  146. TurnOffValue = ruleXE.HasAttribute("Off") ? ruleXE.GetAttribute("Off") : null,
  147. };
  148. }
  149. ruleItem = new VisibleRegRuleItem(rules, info);
  150. }
  151. }
  152. this.AddItem(ruleItem);
  153. ruleItem.FoldGroupItem = groupItem;
  154. }
  155. groupItem.IsFold = true;
  156. groupItem.HideWhenNoSubItem();
  157. }
  158. }
  159. catch { }
  160. }
  161. private static RegistryValueKind GetValueKind(string data)
  162. {
  163. switch(data.ToUpper())
  164. {
  165. case "REG_SZ":
  166. return RegistryValueKind.String;
  167. case "REG_BINARY":
  168. return RegistryValueKind.Binary;
  169. case "REG_DWORD":
  170. return RegistryValueKind.DWord;
  171. case "REG_QWORD":
  172. return RegistryValueKind.QWord;
  173. case "REG_MULTI_SZ":
  174. return RegistryValueKind.MultiString;
  175. case "REG_EXPAND_SZ":
  176. return RegistryValueKind.ExpandString;
  177. default:
  178. return RegistryValueKind.DWord;
  179. }
  180. }
  181. }
  182. }