使用C#制作简易的注册表编辑器
生活随笔
收集整理的這篇文章主要介紹了
使用C#制作简易的注册表编辑器
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
本文節(jié)選自《21天學(xué)通C#》一書
?????下面來實現(xiàn)一個簡易的注冊表編輯器。它具備了Windows操作系統(tǒng)自帶的注冊表編輯器的一般功能。如示例代碼19-7所示。
示例代碼19-7
??????主窗體。主窗體在啟動時,會在加載事件中加載注冊表到樹形控件中,就像在Windows操作系統(tǒng)中的注冊表編輯器一樣。
????代碼如下所示。
01????private?void?treeView1_AfterSelect(object?sender,?TreeViewEventArgs?e)
02????{
03?????????Try????????????????????????????????????????????????//可能會引發(fā)異常
04?????????{
05?????????????strInfo?=?this.TVRegedit.SelectedNode.Parent.Text;
06?????????}
07?????????Catch
08?????????{
09?????????????strInfo?=?string.Empty;????????????????????//清空
10?????????}
11?????????str?=?e.Node.Text;????????????????????????????????//獲取節(jié)點的值
12?????????if?(strInfo?!=?string.Empty)????????????????????//如果選擇節(jié)點不是空的
13?????????{
14?????????????this.label2.Text?=?strInfo?+?"\\"?+?str;????????
????????????????????????????????????????????????????????????????//顯示選取節(jié)點的名稱
15?????????}
16?????????else
17?????????{
18?????????????this.label2.Text?=str;????????????????//否則保留上次的值
19?????????}
20????}?
??????創(chuàng)建注冊鍵,代碼如下所示。
01????private?void?button1_Click(object?sender,?EventArgs?e)
02????{
03??????????string?keyName=this.label2.Text.Trim().ToString()+"\\"+this.textBox1.?Text.Trim().ToString();
04??????????object?obj=(object)this.textBox2.Text.Trim();????????????????????????//進行類型轉(zhuǎn)換
05??????????string?strName?=?this.textBox3.Text.Trim().ToString();????????????//為變量賦值
06??????????if?(strReader?!=?string.Empty)????????????????????????????????????//如果選了添加注冊鍵的類型
07??????????{
08???????????????switch?(strReader)????????????????????????????????????????????//多分支選擇
09???????????????{
10???????????????case?"1":????????????????????????????????????????????????????????//如果選擇了“字符串值”銨鈕
11???????????????????{
12???????????????????????Registry.SetValue(keyName,?strName,?obj,?RegistryValueKind.?String);
13???????????????????????break;
14???????????????????}
15???????????????case?"2":????????????????????????????????????????????????????????//如果單擊了“可擴充字符串值”按鈕
16???????????????????{
17???????????????????????Registry.SetValue(keyName,?strName,?obj,?RegistryValueKind.?ExpandString);
18???????????????????????break;
19???????????????????}
20???????????????}
21??????????this.Banding();????????????????????????????????????????????????????????//重新刷新窗體
22??????????}
23??????????else
24??????????{
25??????????????MessageBox.Show("請選擇創(chuàng)建方式(例如字符串型)");
????????????????????????????????????????????????????????????????????????????????????//錯誤提示
26??????????}
27????}
??????設(shè)置字符串的值,代碼如下所示。
01????private?void?radioButton1_CheckedChanged(object?sender,?EventArgs?e)
02????{
03?????????if?(this.radioButton1.Checked)????????????????????????????????????//單擊了“字符串值”按鈕
04?????????{
05??????????????strReader?=?"1";????????????????????????????????????????????????//將變量賦值為1
06?????????}
07????}
08????private?void?radioButton2_CheckedChanged(object?sender,?EventArgs?e)
09????{
10????????if?(this.radioButton2.Checked)????????????????????????????????????//如果單擊了“擴充的字符串字”按鈕
11????????{
12????????????strReader?=?"2";????????????????????????????????????????????????//將變量賦值為2
13????????}
14????}
15????private?void?Banding()????????????????????????????????????????????????????//對窗體進行綁定
16????{
17?????????this.TVRegedit.Nodes.Clear();????????????????????????????????????????//清空節(jié)點
18?????????RegistryKey?rkRoot=Registry.ClassesRoot;
19?????????RegistryKey?rkUse=?Registry.CurrentUser;
20?????????RegistryKey?rkMachine=Registry.LocalMachine;
21?????????RegistryKey?rkUsers?=?Registry.Users;
22?????????RegistryKey?rkConfig=?Registry.CurrentConfig;
23?????????TreeNode?tRoot?=?new?TreeNode("HKEY_CLASSES_ROOT");
24?????????foreach?(string?si?in?rkRoot.GetSubKeyNames())
25?????????{
26??????????????tRoot.Nodes.Add(si.ToString());
27?????????}
28?????????TreeNode?tUse?=?new?TreeNode("HKEY_CURRENT_USER");
29?????????foreach?(string?si?in?rkUse.GetSubKeyNames())
30?????????{
31??????????????tUse.Nodes.Add(si.ToString());
32?????????}
33?????????TreeNode?tMachine?=?new?TreeNode("HKEY_LOCAL_MACHINE");
34?????????foreach?(string?si?in?rkMachine.GetSubKeyNames())
35?????????{
36?????????????tMachine.Nodes.Add(si.ToString());
37?????????}
38?????????TreeNode?tUsers?=?new?TreeNode("HKEY_USERS");
39?????????foreach?(string?si?in?rkUsers.GetSubKeyNames())
40?????????{
41??????????????tUsers.Nodes.Add(si.ToString());
42?????????}
43?????????TreeNode?tConfig?=?new?TreeNode("HKEY_CURRENT_CONFIG");
44?????????foreach?(string?si?in?rkConfig.GetSubKeyNames())
45?????????{
46??????????????tConfig.Nodes.Add(si.ToString());
47?????????}
48?????????this.TVRegedit.Nodes.Add(tRoot);
49?????????this.TVRegedit.Nodes.Add(tUse);
50?????????this.TVRegedit.Nodes.Add(tMachine);
51?????????this.TVRegedit.Nodes.Add(tUsers);
52?????????this.TVRegedit.Nodes.Add(tConfig);
53????}
??????
????刷新注冊表,對窗體綁定的值全部清掉,重新加載。代碼如下所示。
01????private?void?button3_Click(object?sender,?EventArgs?e)
02????{
03?????????this.Banding();????????????????????????????????????????????//刷新窗體,就是重新綁定
04????}
??????
????創(chuàng)建項,代碼如下所示。
01????private?void?button2_Click(object?sender,?EventArgs?e)
02????{
03????????RegistryKey?rky?=?Registry.CurrentConfig.CreateSubKey(this.textBox4.Text.?Trim().ToString());
04????????this.Banding();????????????????????????????????????????????//重新綁定窗體中的值
05????}
??????
????刪除指定的項,代碼如下所示。
01????private?void?button4_Click(object?sender,?EventArgs?e)
02????{
03?????????string?str?=?this.label2.Text.Trim().ToString();????
????????????????????????????????????????????????????????????????????????//獲取label2中的值
04?????????str=str.Substring(str.IndexOf("\\")+1);????????????????//查字符串里面是否包含的值
05?????????if(MessageBox.Show("是否刪除?",?"提示",?
06?????????MessageBoxButtons.YesNo,?MessageBoxIcon.Warning)?==?DialogResult.Yes)
07?????????{
08?????????????Registry.CurrentConfig.DeleteSubKeyTree(str);//刪除指定的項
09?????????????this.Banding();????????????????????????????????????????//刷新窗體
10?????????}
11????}
??????
????顯示項,代碼如下所示:
01????private?void?button5_Click(object?sender,?EventArgs?e)
02????{
03????????string?str?=?this.label2.Text.Trim().ToString();????//獲取label2的中的值
04????????string?defalutResut;????????????????????????????????????//定義一個變量
05????????if?(str.IndexOf("\\")?!=?-1)????????????????????????????//查字符串里面是否包含的值
06????????{
07?????????????defalutResut?=?str.Substring(0,?str.IndexOf("\\"));
????????????????????????????????????????????????????????????????????//查字符串里面是否包含的值
08?????????????str?=?str.Substring(str.IndexOf("\\")?+?1);?//查字符串里面是否包含的值
09????????}
10????????else
11????????{
12?????????????defalutResut?=?str;
13????????}
14????????switch?(defalutResut)????????????????????????????????//進行分支選擇
15????????{
16????????case?"HKEY_CLASSES_ROOT":????????????????????//如果是HKEY_CLASSES_ROOT項
17?????????????{
18????????????????rkey?=?Registry.ClassesRoot;????????????????//選取項
19????????????????break;????????????????????????????????????????????//跳出分支
20?????????????}
21?????????case?"HKEY_CURRENT_USER":????????????????????//如果是HKEY_CURRENT_USER項
22??????????????{
23?????????????????rkey?=?Registry.CurrentUser;????????????????//選取項
24?????????????????break;????????????????????????????????????????//跳出分支
25??????????????}
26?????????case?"HKEY_LOCAL_MACHINE":????????????????//如果是HKEY_LOCAL_MACHINE項
27??????????????{
28??????????????????rkey?=?Registry.LocalMachine;????????????//選取項
29??????????????????break;????????????????????????????????????????//跳出分支
30??????????????}
31?????????case?"HKEY_USERS":????????????????????????????//如果是HKEY_USERS項
32??????????????{
33??????????????????rkey?=?Registry.Users;????????????????????//選取項
34??????????????????break;????????????????????????????????????????//跳出分支
35??????????????}
36?????????case?"HKEY_CURRENT_CONFIG":????????????????//如是HKEY_CURRENT_CONFIG項
37??????????????{
38??????????????????rkey?=?Registry.CurrentConfig;????????????//選取項
39??????????????????break;????????????????????????????????????????//跳出分支
40??????????????}
41?????????}
42?????????Try????????????????????????????????????????????????????//可能引發(fā)異常
43?????????{
44???????????????RegistryKey?rkeyS?=?rkey.OpenSubKey(str);
45???????????????if?(rkeyS.ValueCount>0)????????????//如果打開的注冊鍵不為空
46???????????????{
47????????????????????foreach?(string?strValue?in?rkeyS.GetValueNames())
48????????????????????{
49??????????????????????????MessageBox.Show(strValue?+?"項的值是:"?+?rkeyS.GetValue?(strValue).ToString());
50??????????????????????????break;
51????????????????????}
52???????????????}
53???????????????else
54???????????????{
55???????????????????MessageBox.Show("無顯示值");????????????//輸出提示信息
56???????????????}
57??????????}
58??????????Catch
59??????????{
60??????????????MessageBox.Show("無顯示值");????????????????//輸出提示信息
61??????????}
62????}
????【運行結(jié)果】選擇“調(diào)試”|“啟動調(diào)試”命令運行程序,結(jié)果如圖19.9所示。
?
????圖19.9??注冊表編輯器
????????
????【范例19-8】可能有的讀者在使用一些優(yōu)化操作系統(tǒng)的軟件,例如Windows優(yōu)化大師。
????
????它有的一些功能就是通過優(yōu)化注冊表實現(xiàn)的。下面就演示優(yōu)化系統(tǒng)的一些實例,
????
????例如,實現(xiàn)加快菜單顯示速度的功能等。如示例代碼19-8所示。
????
????示例代碼19-8
01????using?Microsoft.Win32;????????????????????????????????????//注冊表命名空間
02????namespace?Ex_19_8
03????{
04????????public?partial?class?Form1?:?Form
05????????{
06????????????public?Form1()????????????????????????????????????//窗口類的構(gòu)造函數(shù)
07????????????{
08????????????????InitializeComponent();????????????????????????//完成窗口初始化
09????????????}
10????????????private?void?button1_Click(object?sender,?EventArgs?e)
????????????????????????????????????????????????????????????????????//單擊事件,修改刷新速度
11????????????{
12????????????????try????????????????????????????????????????????????//可能有異常,放在try塊中
13????????????????{
14????????????????????RegistryKey?rek?=????????????????????????//聲明一個變量
15????????????????????Registry.LocalMachine.CreateSubKey(@"System\CurrentControlSet\Control\Update");
16????????????????????rek.SetValue("UpdateMode",0);????????//向注冊鍵寫入新的值
17????????????????????MessageBox.Show("修改刷新速度成功!");????
????????????????????????????????????????????????????//提示修改信息
18????????????????}
19????????????????catch(Exception?ey)????????????????????????//捕獲異常信息
20????????????????{
21????????????????????MessageBox.Show("程序不合適此操作系統(tǒng)");
22????????????????}
23????????????}
24????????????private?void?button2_Click(object?sender,?EventArgs?e)
????????????????????????????????????????????????????????????????//單擊事件,修改菜單顯示速度
25????????????{
26????????????????try????????????????????????????????????????????//可能有異常,放在try塊中
27????????????????{
28????????????????????RegistryKey?rek?=?Registry.LocalMachine.CreateSubKey(@"Control?Panel\Desktop");
29????????????????????rek.SetValue("MenuShowDelay",0);????
????????????????????????????????????????????????//向注冊鍵寫入新的值
30????????????????????MessageBox.Show("修改菜單顯示速度成功!");????
????????????????????????????????????????????????//提示修改信息
31????????????????}
32????????????????catch(Exception?ey)????????????????????//捕獲異常信息
33????????????????{
34?????????????????????MessageBox.Show("程序不合適此操作系統(tǒng)");
35????????????????}
36????????????}
37????????}
38????}
????
????【運行結(jié)果】選擇“調(diào)試”|“啟動調(diào)試”命令運行程序。
轉(zhuǎn)載于:https://www.cnblogs.com/wequst/articles/1415181.html
總結(jié)
以上是生活随笔為你收集整理的使用C#制作简易的注册表编辑器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql测试数据图表_mysql测试数
- 下一篇: 学C#的感想