C#多线程读取注册表,加载至TreeView
2023-06-13 09:14:12 时间
usingSystem;
usingSystem.Drawing;
usingSystem.Windows.Forms;
usingSystem.Threading;
usingMicrosoft.Win32;
namespace星空个性化助手
{
publicpartialclassForm1:Form
{
privatedelegatevoidLoadTreeView左侧(TreeNodenode);//声明委托类型
publicForm1()
{
InitializeComponent();
}
privatevoidForm1_Load(objectsender,EventArgse)
{
Threadthread=newThread(newThreadStart(ReadAllReg));
thread.Start();
}
///<summary>
///读取注册表
///</summary>
privatevoidReadAllReg()
{
LoadTreeView左侧loadTreeView=newLoadTreeView左侧(SendToTreeView);
RegistryKeyreg=Registry.ClassesRoot;
TreeNodenode=newTreeNode("HKEY_CLASSES_ROOT");
ReadRegistry(reg,node);
reg.Close();
if(treeView左侧.InvokeRequired)//将读取的根加载至TreeView
treeView左侧.BeginInvoke(loadTreeView,node);
else
{
treeView左侧.Nodes.Add(node);
}
/*----------------------------------------------------*/
reg=Registry.CurrentUser;
node=newTreeNode("HKEY_CURRENT_USER");
ReadRegistry(reg,node);
reg.Close();
if(treeView左侧.InvokeRequired)//将读取的根加载至TreeView
treeView左侧.BeginInvoke(loadTreeView,node);
else
{
treeView左侧.Nodes.Add(node);
}
/*----------------------------------------------------*/
reg=Registry.LocalMachine;
node=newTreeNode("HKEY_LOCAL_MACHINE");
ReadRegistry(reg,node);
reg.Close();
if(treeView左侧.InvokeRequired)//将读取的根加载至TreeView
treeView左侧.BeginInvoke(loadTreeView,node);
else
{
treeView左侧.Nodes.Add(node);
}
/*----------------------------------------------------*/
reg=Registry.Users;
node=newTreeNode("HKEY_USERS");
ReadRegistry(reg,node);
reg.Close();
if(treeView左侧.InvokeRequired)//将读取的根加载至TreeView
treeView左侧.BeginInvoke(loadTreeView,node);
else
{
treeView左侧.Nodes.Add(node);
}
/*----------------------------------------------------*/
reg=Registry.CurrentConfig;
node=newTreeNode("HKEY_CURRENT_CONFIG");
ReadRegistry(reg,node);
reg.Close();
if(treeView左侧.InvokeRequired)//将读取的根加载至TreeView
treeView左侧.BeginInvoke(loadTreeView,node);
else
{
treeView左侧.Nodes.Add(node);
}
}
///<summary>
///发送到TreeView
///</summary>
///<paramname="node">TreeNode</param>
privatevoidSendToTreeView(TreeNodenode)
{
treeView左侧.Nodes.Add(node);
treeView左侧.Refresh();
}
///<summary>
///递归注册表树
///</summary>
///<paramname="reg">注册表起始点</param>
///<paramname="nodes">起始树,将在它下面建立所有子结点</param>
internalvoidReadRegistry(RegistryKeyreg,TreeNodenodes)//递归注册表树
{
foreach(stringnamesinreg.GetSubKeyNames())
{
TreeNodenode=newTreeNode(names);
try
{
RegistryKeyr=reg.OpenSubKey(names,false);
if(r!=null)
{
ReadRegistry(r,node);
r.Close();
}
else
{
return;
}
}
catch(Exceptionerr)
{
continue;
}
nodes.Nodes.Add(node);
}
}
}
}
相关文章
- C# 多线程使用lamda表达式编程
- C# 多线程编程
- C#多线程同步事件及等待句柄
- C# 多线程 ThreadStart和ParameterizedThreadStart
- C# 多线程编程 ThreadStart ParameterizedThreadStart
- c# mysql executenonquery_C#与数据库访问技术总结(八)之ExecuteNonQuery方法
- C#多线程调试
- c#面试题抽象类和接口的区别-金三银四面试:C#程序员经常遇到的30道基础面试题,想你所想
- c#中过滤html的正则表达式
- 基于C#网站地图制作
- C#double和decimal数据类型以截断的方式保留指定的小数位数
- c#对字符串操作的技巧小结
- 描述C#多线程中lock关键字的使用分析
- c#中多线程访问winform控件的若干问题小结
- C#正则表达式使用方法示例
- C#?肩被????寮??ㄧ被????娣卞?ョ??瑙?/h1>
- c#多线程的应用全面解析
- c#使用windows服务更新站点地图的详细示例
- C#逐行分元素读取记事本数据并写入数据库的方法
- C#实现把彩色图片灰度化代码分享