本文共 2795 字,大约阅读时间需要 9 分钟。
public class Helper{ ////// 搜索与指定(值)名称匹配的全路径 /// /// 起始路径(节点) /// 用于查找的(值)名称 /// 是否搜索起始路径(节点)全部节点 ///public static List RegeditFindFullPath(string path, string value,bool bAll = false) { try { Microsoft.Win32.RegistryKey hklm = Microsoft.Win32.Registry.LocalMachine; Microsoft.Win32.RegistryKey system = hklm.OpenSubKey(path);//不区分大小写 List paths = new List (); paths.Add("HKEY_LOCAL_MACHINE"); paths.Add(path); List output = new List (); RegeditFindFullPath(system, value, ref paths, ref output, bAll); return output; } catch(Exception exp) { return new List (); } } /// /// 是否搜索起始路径(节点)全部路径 /// /// 节点名称 /// 第几层 /// 是否搜索起始路径(节点)全部节点 ///private static bool Check(string SubkeyName, int layer, bool bAll = false) { if (bAll) return true; if (layer == 2 && SubkeyName.ToLower().Contains("controlset") == false) { return false; } if (layer == 3 && SubkeyName.ToLower() != "enum" && SubkeyName.ToLower() != "control") { return false; } if (layer == 4 && SubkeyName.ToLower() != "display" && SubkeyName.ToLower() != "graphicsdrivers") { return false; } return true; } /// /// 递归 - 搜索与指定(值)名称匹配的全路径 /// /// 注册表节点 /// 用于查找的(值)名称 /// 记录路径 /// 记录符合的全路径 /// 是否搜索起始路径(节点)全部节点 private static void RegeditFindFullPath(Microsoft.Win32.RegistryKey parent, string value, ref Listpath, ref List output, bool bAll = false) { try { string fullpath = string.Join("\\", path.ToArray()); foreach (string valuesName in parent.GetValueNames()) { if(value == valuesName) { output.Add(fullpath); } } foreach (string SubkeyName in parent.GetSubKeyNames()) { if (Check(SubkeyName, path.Count, bAll) == false) continue; Microsoft.Win32.RegistryKey Subkey = parent.OpenSubKey(SubkeyName); if(Subkey!=null) { path.Add(SubkeyName); RegeditFindFullPath(Subkey, value, ref path, ref output, bAll); path.RemoveAt(path.Count -1); } } } catch (Exception exp) { } } /// /// 以监视器的注册信息为例 /// /// 是否搜索起始路径(节点)全部节点 ///public static string DesktopMonitor(bool bAllRegEdit = false) { try { string info = ""; List PATHS = RegeditFindFullPath("SYSTEM", "EDID", bAllRegEdit); Microsoft.Win32.RegistryKey hklm = Microsoft.Win32.Registry.LocalMachine; foreach (var path in PATHS) { Microsoft.Win32.RegistryKey Subkey = hklm.OpenSubKey(path.Remove(0, "HKEY_LOCAL_MACHINE\\".Length)); if(Subkey!=null) { byte[] bytes = (byte[])Subkey.GetValue("EDID"); string infoitem = SMQHDesktopMonitor.CEDID.Information(bytes); if (info.Contains(infoitem) == false) { info += string.Format("注册表路径 [计算机\\{0}] EDID\r\n显示器信息 {1}\r\n\r\n", path, infoitem); } } } return info; } catch(Exception exp) { return exp.Message; } }}
转载地址:http://tljub.baihongyu.com/