今天偶然看見一篇有修改注冊表的文章,心中便想C#是否可以修改注冊表,於是自己便從網上找了一些文章學習。
雖然學的很淺,但自己又進步了!
首先了解下C#操作注冊表的類
(1).Registry类:此类主要封装了七个公有的静态域,而这些静态域分别代表这视窗注册表中的七个基本的主键,具体如下所示:
Registry.ClassesRoot 对应于HKEY_CLASSES_ROOT主键
Registry.CurrentUser 对应于HKEY_CURRENT_USER主键
Registry.LocalMachine 对应于 HKEY_LOCAL_MACHINE主键
Registry.User 对应于 HKEY_USER主键
Registry.CurrentConfig 对应于HEKY_CURRENT_CONFIG主键
Registry.DynDa 对应于HKEY_DYN_DATA主键
Registry.PerformanceData 对应于HKEY_PERFORMANCE_DATA主键
(2).RegistryKey类:此类中主要封装了对视窗系统注册表的基本操作。在程序设计中,首先通过Registry类找到注册表中的基本主键,然后通过RegistryKey类,来找其下面的子键和处理具体的操作的。
代碼:
using Microsoft.Win32;
///
<summary>
///
得到注冊表中的值
///
</summary>
///
<returns></returns>
private
string
GetRegistData( )
{
string
registData;
RegistryKey hkml
=
Registry.LocalMachine;
RegistryKey RootFolder
=
Registry.LocalMachine;
RegistryKey system
=
RootFolder.OpenSubKey(
"
system
"
,
true
);
RegistryKey CurrentControlSet
=
system.OpenSubKey(
"
CurrentControlSet
"
,
true
);
RegistryKey Services
=
CurrentControlSet.OpenSubKey(
"
Services
"
,
true
);
RegistryKey Tcpip
=
Services.OpenSubKey(
"
Tcpip
"
,
true
);
RegistryKey Parameters
=
Tcpip.OpenSubKey(
"
Parameters
"
,
true
);
RegistryKey NetCardID
=
Parameters.OpenSubKey(
"
Winsock
"
,
true
);
registData
=
NetCardID.GetValue(
"
HelperDllName
"
,
"
null
"
).ToString();
return
registData;
}
///
<summary>
///
創建注冊表值
///
本例為創建一個XX的子目錄,其創建一鍵為XXX,值為test
///
</summary>
private
void
CreateRegistData()
{
RegistryKey hkml
=
Registry.LocalMachine;
RegistryKey RootFolder
=
Registry.LocalMachine;
RegistryKey system
=
RootFolder.OpenSubKey(
"
system
"
,
true
);
RegistryKey CurrentControlSet
=
system.OpenSubKey(
"
CurrentControlSet
"
,
true
);
RegistryKey Services
=
CurrentControlSet.OpenSubKey(
"
Services
"
,
true
);
RegistryKey Tcpip
=
Services.OpenSubKey(
"
Tcpip
"
,
true
);
RegistryKey Parameters
=
Tcpip.OpenSubKey(
"
Parameters
"
,
true
);
RegistryKey NetCardID
=
Parameters.OpenSubKey(
"
Winsock
"
,
true
);
RegistryKey xxx
=
NetCardID.CreateSubKey(
"
xxx
"
);
//
384為十進制,Dword為16進制,系統將自動進行轉換,最終注冊表存入的值為180,180為384的16進制
xxx.SetValue(
"
xxx
"
,
384
,RegistryValueKind.DWord);
}
///
<summary>
///
刪除指的鍵
///
</summary>
private
void
DeleteValueRegistData()
{
RegistryKey hkml
=
Registry.LocalMachine;
RegistryKey RootFolder
=
Registry.LocalMachine;
RegistryKey system
=
RootFolder.OpenSubKey(
"
system
"
,
true
);
RegistryKey CurrentControlSet
=
system.OpenSubKey(
"
CurrentControlSet
"
,
true
);
RegistryKey Services
=
CurrentControlSet.OpenSubKey(
"
Services
"
,
true
);
RegistryKey Tcpip
=
Services.OpenSubKey(
"
Tcpip
"
,
true
);
RegistryKey Parameters
=
Tcpip.OpenSubKey(
"
Parameters
"
,
true
);
RegistryKey NetCardID
=
Parameters.OpenSubKey(
"
Winsock
"
,
true
);
RegistryKey xxx
=
NetCardID.OpenSubKey(
"
xxx
"
,
true
);
string
[] SubValue;
SubValue
=
xxx.GetValueNames();
foreach
(
string
sSubValue
in
SubValue)
{
if
(sSubValue
==
"
xxx
"
)
{
xxx.DeleteValue(sSubValue);
}
}
}
///
<summary>
///
刪除子目錄
///
</summary>
private
void
DeleteSubRegistData()
{
RegistryKey hkml
=
Registry.LocalMachine;
RegistryKey RootFolder
=
Registry.LocalMachine;
RegistryKey system
=
RootFolder.OpenSubKey(
"
system
"
,
true
);
RegistryKey CurrentControlSet
=
system.OpenSubKey(
"
CurrentControlSet
"
,
true
);
RegistryKey Services
=
CurrentControlSet.OpenSubKey(
"
Services
"
,
true
);
RegistryKey Tcpip
=
Services.OpenSubKey(
"
Tcpip
"
,
true
);
RegistryKey Parameters
=
Tcpip.OpenSubKey(
"
Parameters
"
,
true
);
RegistryKey NetCardID
=
Parameters.OpenSubKey(
"
Winsock
"
,
true
);
string
[] SubValue;
SubValue
=
NetCardID.GetSubKeyNames();
foreach
(
string
sSubValue
in
SubValue)
{
if
(sSubValue
==
"
xxx
"
)
{
NetCardID.DeleteSubKey (sSubValue);
}
}
}