C# 多线程读取注册表,加载至TreeView_C#教程

复制代码 代码如下:

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;
using Microsoft.Win32;
namespace 星空个性化助手
{
public partial class Form1 : Form
{
private delegate void LoadTreeView左侧( TreeNode node );//声明委托类型
public Form1()
{
InitializeComponent ();
}
private void Form1_Load( object sender , EventArgs e )
{
Thread thread = new Thread (new ThreadStart (ReadAllReg));
thread.Start ();
}
/// <summary>
/// 读取注册表
/// </summary>
private void ReadAllReg()
{
LoadTreeView左侧 loadTreeView = new LoadTreeView左侧 (SendToTreeView);
RegistryKey reg = Registry.ClassesRoot;
TreeNode node = new TreeNode ("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 = new TreeNode ("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 = new TreeNode ("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 = new TreeNode ("HKEY_USERS");
ReadRegistry (reg , node);
reg.Close ();
if( treeView左侧.InvokeRequired )//将读取的根加载至TreeView
treeView左侧.BeginInvoke (loadTreeView , node);
else
{
treeView左侧.Nodes.Add (node);
}
/*----------------------------------------------------*/
reg = Registry.CurrentConfig;
node = new TreeNode ("HKEY_CURRENT_CONFIG");
ReadRegistry (reg , node);
reg.Close ();
if( treeView左侧.InvokeRequired )//将读取的根加载至TreeView
treeView左侧.BeginInvoke (loadTreeView , node);
else
{
treeView左侧.Nodes.Add (node);
}
}
/// <summary>
/// 发送到TreeView
/// </summary>
/// <param name="node">TreeNode</param>
private void SendToTreeView( TreeNode node )
{
treeView左侧.Nodes.Add (node);
treeView左侧.Refresh ();
}
/// <summary>
/// 递归注册表树
/// </summary>
/// <param name="reg">注册表起始点</param>
/// <param name="nodes">起始树,将在它下面建立所有子结点</param>
internal void ReadRegistry( RegistryKey reg , TreeNode nodes )//递归注册表树
{
foreach( string names in reg.GetSubKeyNames () )
{
TreeNode node = new TreeNode (names);
try
{
RegistryKey r = reg.OpenSubKey (names , false);
if( r != null )
{
ReadRegistry (r , node);
r.Close ();
}
else
{
return;
}
}
catch( Exception err )
{
continue;
}
nodes.Nodes.Add (node);
}
}
}
}

时间: 2024-11-02 18:26:27

C# 多线程读取注册表,加载至TreeView_C#教程的相关文章

64位读取注册表与32位的区别

有一个读取注册表信息的程序  if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, subkeystring , 0, KEY_READ, &hKey) == ERROR_SUCCESS)/ ,在32位下完全正常,但是在64位返回值正确,但就是读不到东西.后来单步发现读不到东西,就搜64位读注册表失败,发现需要加 if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, subkeystring , 0,KEY_READ|KEY_WOW64_64KEY, &am

.Net 2.0 原汁原味读取注册表

注册表 在.Net 1.x当中,使用Microsoft.Win32.RegistryKey类的GetValue方法读取注册表数据时,其实数据都是经过"处理"的: 例如,某个字符串数据本来的值是%SystemRoot%\System32\IoLogMsg.dll但是用GetValue方法得到的数据却是C:\WINDOWS\System32\IoLogMsg.dll 也就是说,在读取注册表中的字符串时,系统会自作主张地替你展开环境变量. 这的确省去我们调用Environment.Expan

c++读取注册表详解

  1.读注册表 // 读取注册表 CString ReadRegisteTable(CString root,CString path, CString key) { HKEY hAppKey; LPCTSTR WINDS_SERVICE_REGISTRY_KEY=path; LPCTSTR DATA_FILE_SUB_KEY=key; char szDataFile[80]; if(root=="HKEY_LOCAL_MACHINE") { if (ERROR_SUCCESS ==

vc++-VC++ 读取注册表返回2的问题

问题描述 VC++ 读取注册表返回2的问题 我想读取一下DHCP的 IP地址,可是RegQueryValue返回来2的错误,请大侠帮我看看,是怎么回事?多谢了! int main(int argc, char* argv[]) { HKEY hTT; long lRet; //lRet=RegOpenKey(HKEY_LOCAL_MACHINE,"SYSTEMControlSet001ServicesTcpipParametersInterfaces{CF166061-CAE0-4198-923

Advanced Installer读取注册表时将Program Files读取为Program Files (x86)的解决办法

原文:Advanced Installer读取注册表时将Program Files读取为Program Files (x86)的解决办法 今天同事在做安装包的时候,有一个读取注册表路径的需求,需要根据读取的值来写配置文件,按照常规的做法,写好了注册表搜索方法,但是在测试的时候,发现总是会将系统盘下的Program Files\xxx路径读取为Program Files (x86)\xxx,如下图所示: 之后测试了如果读取非系统盘下的此路径,不会出现这个问题. 但是这个路径一般情况下都是默认安装在

代码-如何用VC读取注册表二进制值,比如ShutdownTime?求助~

问题描述 如何用VC读取注册表二进制值,比如ShutdownTime?求助~ 用RegQueryValueEx读取数据,应该放在哪种数据类型中呢,求有效代码~ 下面这段是自己的提取TypedURLsTime的代码.不知问题在哪.. int main() { HKEY hKey; DWORD lpType = REG_BINARY; BYTE time[64]; DWORD timeSize = sizeof(time); RegOpenKeyEx(HKEY_CURRENT_USER, "Soft

读取注册表根据Office版本获取数据库连接字段_Access

/// <summary> /// 读取注册表,根据Office版本获取数据库连接字段 /// </summary> /// <returns>数据库连接字段</returns> private string GetConnectionString() { string strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = "; RegistryKey

js读取注册表的键值示例_javascript技巧

复制代码 代码如下: <span style="font-size:18px">try { var shell = new ActiveXObject("WScript.Shell"); --读取注册表 var key = shell.RegRead("HKEY_CURRENT_USER\\Software\\AC3Filter\\equalizer\\Linear scale\\eq_freq_0"); -- 删除注册表 shell

java读取注册表乱码问题

问题描述 用Java读取注册表时候,注册表的字段如果是中文的话会变成"?"号:....Stringkeys[]={"info"};Stringvalues[]={"中文"};Preferencesprefs=Preferences.userRoot().node("/library/fps");for(inti=0;i<keys.length;i++){prefs.put(keys[i],values[i]);}...