C#注册表情缘
时间:2022-05-07
本文章向大家介绍C#注册表情缘,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
记得当时刚接触C#的时候,喜欢编写各种小软件,而注册表系列和网络系列被当时的我认为大牛的必备技能。直到我研究注册表前一天我都感觉他是那么的高深。
今天正好有空,于是就研究了下注册表系列的操作,也随手封装了一个注册表帮助类。简单记一下,当饭后娱乐
完整Demo研究:https://github.com/dunitian/LoTCodeBase/tree/master/NetCode/0.知识拓展/02.注册表系
这个是一些常用的方法和属性(不全,只是列出了比较常用的一些)【OpenSubKey(string name,bool b)当b为true则表示开了可写权限】
//RegistryKey
//属性:
// ValueCount 检索项中值的计数
// SubKeyCount 获取子项个数
//方法:
// OpenSubKey(string name,bool b) 获取子项 RegistryKey,b为true时代表可写
// GetSubKeyNames() 获取所有子项名称的字符串数组
// GetValueNames() 检索包含与此项关联的所有值名称的字符串数组
// GetValue(string name) 获取指定名称,不存在名称/值对,则返回 null
// CreateSubKey(string subkey) 创建或者打开子项的名称或路径
// SetValue(string name,object value) 创建或者打开子项的名称或路径
// DeleteSubKeyTree(string subkey) 递归删除指定目录,不存在则抛异常
// DeleteSubKey(string subkey,bool b) 删除子项,b为false则当子项不存在时不抛异常
// DeleteValue(string name,bool b) 删除指定的键值,b为false则当子项不存在时不抛异常
先举个简单的案例:
代码如下:
//获取一个表示HKLM键的RegistryKey
RegistryKey rk = Registry.LocalMachine;
//打开HKLM的子项Software
RegistryKey subKey = rk.OpenSubKey(@"software");
//遍历所有子项名称的字符串数组
foreach (var item in subKey.GetSubKeyNames())
{
//以只读方式检索子项
RegistryKey sonKey = subKey.OpenSubKey(item);
rtxt.AppendText(string.Format("n--->{0}<---nSubKeyCount:{1} ValueCount:{2} FullName:{3}n==================================n", item, sonKey.SubKeyCount, sonKey.ValueCount, sonKey.Name));
//检索包含与此项关联的所有值名称的字符串数组
foreach (var name in sonKey.GetValueNames())
{
rtxt.AppendText(string.Format("Name:{0} Value:{1} Type:{2}n", name, sonKey.GetValue(name), sonKey.GetValueKind(name)));
}
}
做个综合的案例:
代码如下:
public partial class MainForm : Form
{
public RegistryKey Reg { get; set; }
public MainForm()
{
InitializeComponent();
//初始化
var rootReg = Registry.LocalMachine;
Reg = rootReg.OpenSubKey("software", true);//开权限
}
#region 公用方法
/// <summary>
/// 检验是否为空
/// </summary>
/// <param name="dntReg"></param>
private bool KeyIsNull(RegistryKey dntReg)
{
if (dntReg == null)
{
rtxt.AppendText("注册表中没有dnt注册项n");
return true;
}
return false;
}
/// <summary>
/// 遍历Key的Value
/// </summary>
/// <param name="reg"></param>
private void ForeachRegKeys(RegistryKey reg)
{
rtxt.AppendText(string.Format("n SubKeyCount:{0} ValueCount:{1} FullName:{2}n", reg.SubKeyCount, reg.ValueCount, reg.Name));
foreach (var name in reg.GetValueNames())
{
rtxt.AppendText(string.Format("Name:{0} Value:{1} Type:{2}n", name, reg.GetValue(name), reg.GetValueKind(name)));
}
}
#endregion
//查
private void btn1_Click(object sender, EventArgs e)
{
var dntReg = Reg.OpenSubKey("dnt");
if (KeyIsNull(dntReg)) return;
ForeachRegKeys(dntReg);
foreach (var item in dntReg.GetSubKeyNames())
{
//以只读方式检索子项
RegistryKey sonKey = dntReg.OpenSubKey(item);
ForeachRegKeys(sonKey);
}
}
//增
private void btn2_Click(object sender, EventArgs e)
{
var dntReg = Reg.CreateSubKey("dnt");
dntReg.SetValue("web", "http://www.dkill.net");
var sonReg = dntReg.CreateSubKey("path");
sonReg.SetValue("value", "D:\Program Files\dnt");
rtxt.AppendText("添加成功n");
}
//改
private void btn3_Click(object sender, EventArgs e)
{
var dntReg = Reg.OpenSubKey("dnt", true);
if (KeyIsNull(dntReg)) return;
dntReg.SetValue("web", "http://dnt.dkill.net");
rtxt.AppendText("修改成功n");
}
//删
private void btn4_Click(object sender, EventArgs e)
{
try
{
#region 删除某个值
//var dntReg = Reg.OpenSubKey("dnt", true);
//if (KeyIsNull(dntReg)) return;
//dntReg.DeleteValue("web", false);
#endregion
Reg.DeleteSubKeyTree("dnt", false);
rtxt.AppendText("删除成功n");
}
catch (ArgumentException ex)
{
rtxt.AppendText(ex.ToString());
}
}
private void clearlog_Click(object sender, EventArgs e)
{
rtxt.Clear();
}
}
Helper类综合实战:(有其他演示,有的电脑会出现权限问题)
using Microsoft.Win32;
using System.Collections.Generic;
public static partial class RegistryHelper
{
#region 节点
/// <summary>
/// HKEY_LOCAL_MACHINE 节点
/// </summary>
public static RegistryKey RootReg = Registry.LocalMachine;
/// <summary>
/// HKEY_LOCAL_MACHINE 下 Software 节点
/// </summary>
public static RegistryKey SoftReg = Registry.LocalMachine.OpenSubKey("software", true);
/// <summary>
/// 包含有关当前用户首选项的信息。该字段读取 Windows 注册表基项 HKEY_CURRENT_USER
/// </summary>
public static RegistryKey CurrentUser = Registry.CurrentUser;
/// <summary>
/// HKEY_CURRENT_USER 下 Software 节点
/// </summary>
public static RegistryKey UserSoftReg = Registry.CurrentUser.OpenSubKey("software", true);
#endregion
#region 查询
/// <summary>
/// 根据名称查找Key,有则返回RegistryKey对象,没有则返回null
/// </summary>
/// <param name="name">要打开的子项的名称或路径</param>
/// <param name="b">如果不需要写入权限请选择false</param>
/// <returns></returns>
public static RegistryKey FindKey(this RegistryKey reg, string name, bool b = true)
{
return reg.OpenSubKey(name, b);
}
/// <summary>
/// 获取(name,value)字典,没有则返回null
/// </summary>
/// <param name="reg">当前RegistryKey</param>
/// <returns></returns>
public static IDictionary<string, object> GetKeyValueDic(this RegistryKey reg)
{
var dic = new Dictionary<string, object>();
if (reg.ValueCount == 0) { return null; }
ForeachRegKeys(reg, ref dic);
return dic;
}
/// <summary>
/// 获取子项(name,value)字典,没有则返回null
/// </summary>
/// <param name="reg">当前RegistryKey</param>
/// <returns></returns>
public static IDictionary<string, object> GetSubKeyValueDic(this RegistryKey reg)
{
var dic = new Dictionary<string, object>();
if (reg.SubKeyCount == 0) { return null; }
foreach (var item in reg.GetSubKeyNames())
{
//以只读方式检索子项
var sonKey = reg.OpenSubKey(item);
ForeachRegKeys(sonKey, ref dic);
}
return dic;
}
/// <summary>
/// 遍历RegistryKey
/// </summary>
/// <param name="reg"></param>
/// <param name="dic"></param>
private static void ForeachRegKeys(RegistryKey reg, ref Dictionary<string, object> dic)
{
foreach (var name in reg.GetValueNames())
{
dic.Add(name, reg.GetValue(name));
}
}
#endregion
#region 添加
/// <summary>
/// 添加一个子项
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public static RegistryKey AddSubItem(this RegistryKey reg, string name)
{
return reg.CreateSubKey(name);
}
/// <summary>
/// 添加key-value,异常则RegistryKey对象返回null
/// </summary>
/// <param name="reg"></param>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
public static RegistryKey AddKeyValue(this RegistryKey reg, string key, object value)
{
reg.SetValue(key, value);
return reg;
}
#endregion
#region 修改
/// <summary>
/// 修改key-value,异常则RegistryKey对象返回null
/// </summary>
/// <param name="reg"></param>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
public static RegistryKey UpdateKeyValue(this RegistryKey reg, string key, object value)
{
return reg.AddKeyValue(key, value);
}
#endregion
#region 删除
/// <summary>
/// 根据Key删除项
/// </summary>
/// <param name="reg"></param>
/// <param name="key"></param>
/// <returns></returns>
public static RegistryKey DeleteKeyValue(this RegistryKey reg, string key)
{
reg.DeleteValue(key, false);
return reg;
}
/// <summary>
/// 删除子项所有内容
/// </summary>
/// <param name="reg"></param>
/// <param name="key"></param>
/// <returns></returns>
public static RegistryKey ClearSubAll(this RegistryKey reg, string key)
{
reg.DeleteSubKeyTree(key, false);
return reg;
}
#endregion
}
- .NET的资源并不限于.resx文件,你可以采用任意存储形式[下篇]
- 量化投资教程:用R语言打造量化分析平台
- 也谈事件(Event)
- Zuul:构建高可用网关之多维度限流
- Hystrix:HystrixCollapser请求合并
- oauth2.0 实现spring cloud nosession
- 基于自定义向导的C++单元测试环境自动化配置
- 【spring cloud】自定义jwt实现spring cloud nosession
- R语言的三种聚类方法
- ArrayList foreach 循环里进行元素的 remove add 操作有什么现象?
- 10个令人相见恨晚的R语言包
- 小心Windows旧版认证暴露你的系统帐户密码
- DNS Shell初体验
- 如何在Weka中加载CSV机器学习数据
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- MySQL information_schema详解 OPTIMIZER_TRACE
- 用 Python 画一个奸笑(滑稽)表情
- Python 进阶(十):网络编程
- Python 数据分析(二):Matplotlib 绘图
- 用 Python 制作一个艺术签名小工具,给自己设计一个优雅的签名
- 你认可《后浪》吗
- Python 数据分析(三):初识 Pandas
- MySQL information_schema详解 PARAMETERS
- Python 数据分析(四):Pandas 进阶
- 用 Python 写一个颜值测试小工具
- 当 Python 遇到微信
- CenterNet之loss计算代码解析
- 爬取林丹和赵雅淇的微博评论,看看网友都说了些什么
- 静默安装单机Oracle数据库软件
- 如何用 Python 生成炫酷二维码