博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【语言-c#】C# 遍历注册表
阅读量:2193 次
发布时间:2019-05-02

本文共 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 List
path, 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/

你可能感兴趣的文章
为什么需要 Mini-batch 梯度下降,及 TensorFlow 应用举例
查看>>
为什么在优化算法中使用指数加权平均
查看>>
什么是 Q-learning
查看>>
用一个小游戏入门深度强化学习
查看>>
5 分钟入门 Google 最强NLP模型:BERT
查看>>
初探Java设计模式4:一文带你掌握JDK中的设计模式
查看>>
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>
Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同
查看>>
Java集合详解8:Java集合类细节精讲,细节决定成败
查看>>
Java并发指南1:并发基础与Java多线程
查看>>
Java并发指南2:深入理解Java内存模型JMM
查看>>
Java并发指南3:并发三大问题与volatile关键字,CAS操作
查看>>
Java并发指南4:Java中的锁 Lock和synchronized
查看>>
Java并发指南5:JMM中的final关键字解析
查看>>