微軟的幫助
Registry..::.GetValue 方法,
檢索與指定的註冊表項中的指定名稱關聯的值。如果在指定的項中未找到該名稱,則返回您提供的默認值;或者,如果指定的項不存在,則返回 nullNothingnullptrnull 引用(在 Visual Basic 中爲 Nothing)。
Registry..::.SetValue 方法,設置指定的註冊表項的指定名稱/值對。如果指定的項不存在,則創建該項。
C#程序開發範例寶典
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;
namespace Ex08_01
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
string strPath = "HKEY_CURRENT_CONFIG//HyWork";//設默認值
object objName = (object)this.textBox1.Text.Trim();
object objPwd = (object)this.textBox2.Text.Trim();
Registry.SetValue(strPath, "用戶名", objName, RegistryValueKind.String);
Registry.SetValue(strPath, "密碼", objPwd, RegistryValueKind.String);
this.label3.Text = "恭喜,信息以成功寫入注刪表";
}
catch
{
return;
}
}
private void button2_Click(object sender, EventArgs e)
{
try
{
RegistryKey rk = Registry.CurrentConfig.OpenSubKey("HyWork");
string strName = rk.GetValue("用戶名", "Null").ToString();
string strPwd = rk.GetValue("密碼", "Null").ToString();
MessageBox.Show("用戶名:" + strName + "/r/n" + "密 碼:"+strPwd);
this.label3.Text = "恭喜,信息以成功提取";
}
catch
{
return;
}
}
}
}
以下從‘讀’‘寫’‘刪除’‘判斷’四個事例實現對註冊表的簡單操作
1.讀取指定名稱的註冊表的值
private string GetRegistData(string name)
{
string registData;
RegistryKey hkml = Registry.LocalMachine;
RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
RegistryKey aimdir = software.OpenSubKey("XXX",true);
registData = aimdir.GetValue(name).ToString();
return registData;
}
以上是讀取的註冊表中HKEY_LOCAL_MACHINE/SOFTWARE目錄下的XXX目錄中名稱爲name的註冊表值;
2.向註冊表中寫數據
private void WTRegedit(string name,string tovalue)
{
RegistryKey hklm = Registry.LocalMachine;
RegistryKey software = hklm.OpenSubKey("SOFTWARE",true);
RegistryKey aimdir = software.CreateSubKey("XXX");
aimdir.SetValue(name,tovalue);
}
以上是在註冊表中HKEY_LOCAL_MACHINE/SOFTWARE目錄下新建XXX目錄並在此目錄下創建名稱爲name值爲tovalue的註冊表項;
3.刪除註冊表中指定的註冊表項
private void DeleteRegist(string name)
{
string[] aimnames;
RegistryKey hkml = Registry.LocalMachine;
RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
RegistryKey aimdir = software.OpenSubKey("XXX",true);
aimnames = aimdir.GetSubKeyNames();
foreach(string aimKey in aimnames)
{
if(aimKey == name)
aimdir.DeleteSubKeyTree(name);
}
}
以上是在註冊表中HKEY_LOCAL_MACHINE/SOFTWARE目錄下XXX目錄中刪除名稱爲name註冊表項;
4.判斷指定註冊表項是否存在
private bool IsRegeditExit(string name)
{
bool _exit = false;
string[] subkeyNames;
RegistryKey hkml = Registry.LocalMachine;
RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
RegistryKey aimdir = software.OpenSubKey("XXX",true);
subkeyNames = aimdir.GetSubKeyNames();
foreach(string keyName in subkeyNames)
{
if(keyName == name)
{
_exit = true;
return _exit;
}
}
return _exit;
}
以上是在註冊表中HKEY_LOCAL_MACHINE/SOFTWARE目錄下XXX目錄中判斷名稱爲name註冊表項是否存在,這一方法在刪除註冊表時已經存在,在新建一註冊表項時也應有相應判斷。
http://blog.csdn.net/greenerycn/archive/2007/03/06/1522616.aspx
C#讀寫註冊表
一直想寫個c#版的去箭頭工具,今天特意寫了一下,瞭解了.net下操作註冊表的方法.
先說說.net下的函數:
NET框架在Microsoft.Win32名字空間中提供了兩個類來操作註冊表:Registry和RegistryKey。這兩個類都是密封類不允許被繼承。下面我們分別來介紹這兩個類。
Registry類提供了7個公共的靜態域,分別代表7個基本主鍵(其中兩個在XP系統中沒有)分別是:
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主鍵
RegistryKey類中提供了對註冊表操作的方法。要注意的是操作註冊表必須符合系統權限,否則將會拋出錯誤。
創建子鍵的方法原型爲:
public RegistryKey CreateSubKey(string sunbkey);
參數sunbkey表示要創建的子鍵的名稱或路徑名。創建成功返回被創建的子鍵,否則返回null。
打開子鍵的方法原型爲:
public RegistryKey OpenSubKey(string name);
public RegistryKey OpenSubKey(string name,bool writable);
參數name表示要打開的子鍵名或其路徑名,參數writable表示被打開的子鍵是否允許被修改,第一個方法打開的子鍵是隻讀的。
刪除子鍵的方法原型爲:
public void DeleteSubKey(string subkey);
該方法用於刪除指定的主鍵。如果要刪除的子鍵還包含主鍵則刪除失敗,並返回一個異常,如果要徹底刪除該子鍵極其目錄下的子鍵可以用方法DeleteSubKeyTree,該方法原型如下:
public void DeleteSunKeyTree(string subkey);
讀取鍵值的方法原型如下:
public object GetValue(string name);
public object GetValue(string name,object defaultValue);
參數name表示鍵的名稱,返回類型是一個object類型,如果指定的鍵不存在則返回null。如果失敗又不希望返回的值是null則可以指定參數defaultValue,指定了參數則在讀取失敗的情況下返回該參數指定的值。
設置鍵值的方法原型如下:
public object SetValue(string name,object value);
刪除鍵值的方法原型如下:
public void DeleteValue(string name);
下面是去除快捷方式上的箭頭的源代碼:
using System.Collections.Generic;
using System.Text;
using Microsoft.Win32;
//學習c#操作註冊表
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
RegistryKey test_rk;
Console.WriteLine("*********************************************************");
Console.WriteLine(" 快捷方式箭頭去除工具 2007");
Console.WriteLine("*********************************************************");
test_rk = Registry.ClassesRoot.OpenSubKey("lnkfile",true);
if (test_rk.GetValue("IsShortcut") == null)
{
Console.WriteLine("快捷方式上的箭頭已去除!");
}
else
{
test_rk.DeleteValue("IsShortcut");
Console.WriteLine("執行成功!請註銷後查看效果.");
}
test_rk.Close(); //不要忘記哦
Console.Read();
}
}
}
參考文章:
C#操作註冊表 :http://blog.csdn.net/jxufewbt/archive/2006/06/29/849595.aspx
PS,不要忘記關閉註冊表