c# 注册表操作
c# 注册表操作
c# 注册表操作一、注册表中预定义主键
1、HKEY_CLASSES_ROOT
该主键包含了文件的扩展名和应用程序的关联信息以及Window Shell和OLE用于储存注册表的信息。该主键下的子键决定了在WINDOWS中如何显示该类文件以及他们的图标,该主键是从HKEY_LCCAL_MACHINE\SOFTWARE\Classes映射过来的。
2、HKEY_CURRENT_USER
该主键包含了如用户窗口信息,桌面设置等当前用户的信息。
3、HKEY_LOCAL_MACHINE
主键包含了计算机软件和硬件的安装和配置信息,该信息可供所有用户使用
4、HKEY_USERS
该主键记录了当前用户的设置信息,每次用户登入系统时,就会在该主键下生成一个与用户登入名一样的子键,该子键保存了当前用户的桌面设置、背景位图、快捷键,字体等信息。一般应用程序不直接访问改主键,而是通过主键HKEY_CURRENT_USER进行访问。
5、HKEY_CURRENT_CONFIG
该主键保存了计算机当前硬件的配置信息,这些配置可以根据当前所连接的网络类型或硬件驱动软件安装的改变而改变。
二、C#中对注册表操作的支持
1、.NET框架在Microsoft.Win32名字空间中提供了两个类来操作注册表:Registry和RegistryKey。这两个类都是密封类不允许被继承。
2、Registry类提供了几个公共的静态域,分别代表基本主键分别是:Registry.ClassesRoot,Registry.CurrentUser,Registry.LocalMachine,Registry.Users,Registry.CurrentConfig。
3、RegistryKey类中提供了对注册表操作的方法。
4、要注意的是操作注册表必须符合系统权限,否则将会抛出错误。
三、用C#写的一个注册表操作类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Win32;
namespace TagReceiver
{
class RegistryHelper
{
/// <summary>
/// 读取指定名称的注册表的值
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public string GetRegistryData(RegistryKey root, string subkey, string name)
{
string registData = "";
RegistryKey myKey = root.OpenSubKey(subkey, true);
if (myKey != null)
{
registData = myKey.GetValue(name).ToString();
}
return registData;
}
/// <summary>
/// 向注册表中写数据
/// </summary>
/// <param name="name"></param>
/// <param name="tovalue"></param>
public void SetRegistryData(RegistryKey root, string subkey, string name, string value)
{
RegistryKey aimdir = root.CreateSubKey(subkey);
aimdir.SetValue(name, value);
}
/// <summary>
/// 删除注册表中指定的注册表项
/// </summary>
/// <param name="name"></param>
public void DeleteRegist(RegistryKey root, string subkey, string name)
{
string[] subkeyNames;
RegistryKey myKey = root.OpenSubKey(subkey, true);
subkeyNames = myKey.GetSubKeyNames();
foreach (string aimKey in subkeyNames)
{
if (aimKey == name)
myKey.DeleteSubKeyTree(name);
}
}
/// <summary>
/// 判断指定注册表项是否存在
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public bool IsRegistryExist(RegistryKey root, string subkey, string name)
{
bool _exit = false;
string[] subkeyNames;
RegistryKey myKey = root.OpenSubKey(subkey, true);
subkeyNames = myKey.GetSubKeyNames();
foreach (string keyName in subkeyNames)
{
if (keyName == name)
{
_exit = true;
return _exit;
}
}
return _exit;
}
/// <summary>
/// 判断键值是否存在
/// </summary>
private bool IsRegeditKeyExit()
{
string[] subkeyNames;
RegistryKey hkml = Registry.LocalMachine;
RegistryKey software = hkml.OpenSubKey("SOFTWARE\\\\test");
//RegistryKey software = hkml.OpenSubKey("SOFTWARE\\\\test", true);
subkeyNames = software.GetValueNames();
//取得该项下所有键值的名称的序列,并传递给预定的数组中
foreach (string keyName in subkeyNames)
{
if (keyName == "test") //判断键值的名称
{
hkml.Close();
return true;
}
}
hkml.Close();
return false;
}
}
}
- c# 注册表操作
- html注册表单验证代码(JavaScript+html实现前端页面随机二维码验证)
- python3.9.6生成的注册表(厉害了,Python也能操作注册表)
- 换代在即,现在是抄底 7.5代 高尔夫的最佳时机吗(换代在即现在是抄底)
- 2020年大众7.5代高尔夫R终结特别版 最后的呐喊(2020年大众7.5代高尔夫R终结特别版)
- 七年前的这部剧有毒,全剧只有女主红到发紫,男主至今无人认识(七年前的这部剧有毒)
- 宋轶除了演过于曼丽,原来还演过一个青楼女子(宋轶除了演过于曼丽)
- 赵丽颖第一部当女主的戏,主角配角个个都是实力演员(赵丽颖第一部当女主的戏)
- 乾隆为何这么喜爱白塔原因是什么(乾隆为何这么喜爱白塔原因是什么)
热门推荐
- CSS中background-attachment
- packagejson怎么使用(最全的package.json解析)
- idea关联mysql数据库(IDEA无法连接mysql数据库的6种解决方法大全)
- XPATH的用法
- kubernetes初始化教程(如何在kubernetes中创建Pod)
- 微信小程序怎么绕过人脸的(详解微信小程序官方人脸核身认证)
- sqlserver完全删除教程(sql server编写archive通用模板脚本实现自动分批删除数据)
- mysql数据库怎么换行(MySQL数据中很多换行符和回车符的解决方法)
- mysqllinux解压版安装教程学习(解决Linux安装mysql 在/etc下没有my.cnf的问题)
- canvas 动画线段(canvas简单连线动画的实现代码)