技术开发 频道

.NET Compact Framework下注册表导出工具的开发

 导出具体的一个key的代码

 public void Export(StringBuilder sb, RegistryKey key)

 {

 //log down itself.

 sb.AppendFormat(CultureInfo.CurrentCulture, "\r\n[{0}]\r\n", key.Name);

 //log down values

 string[] s = key.GetValueNames();

 Array.Sort(s);

 //log down "Default" first

 try

 {

 key.GetValue(Default);

 ExportValue(sb, key, Default);

 }

 catch

 {

 }

 foreach(string name in s)

 {

 if (!name.Equals(Default))

 {

 ExportValue(sb, key, name);

 }

 }

 //log down subkeys

 s = key.GetSubKeyNames();

 Array.Sort(s);

 foreach(string subKeyName in s)

 {

 Export(sb, key.OpenSubKey(subKeyName));

 }

 }

 导出Key时先导出其自身,然后导出Key下的所有Values,导出Value时如果有Default Value的话先导出Default Value,然后导出其他Value。导出Value后再递归导出所有的SubKeys。

 导出Value的代码

 private void ExportValue(StringBuilder sb, RegistryKey key, string name)

 {

 switch (key.GetValueKind(name))

 {

 case RegistryValueKind.DWord:

 int dword = (int)key.GetValue(name);

 if (name.Equals(Default))

 {

 sb.AppendFormat(CultureInfo.CurrentCulture, "@=dword:{0:X8}\r\n", dword);

 }

 else

 {

 sb.AppendFormat(CultureInfo.CurrentCulture, "\"{0}\"=dword:{1:X8}\r\n", name, dword);

 }

 break;

 case RegistryValueKind.String:

 if (name.Equals(Default))

 {

 sb.AppendFormat(CultureInfo.CurrentCulture, "@=\"{0}\"\r\n", key.GetValue(name));

 }

 else

 {

 sb.AppendFormat(CultureInfo.CurrentCulture, "\"{0}\"=\"{1}\"\r\n", name, key.GetValue(name));

 }

 break;

 case RegistryValueKind.MultiString:

 string[] values = (string[])key.GetValue(name);

 if (name.Equals(Default))

 {

 sb.Append("@=multi_sz:");

 }

 else

 {

 sb.AppendFormat(CultureInfo.CurrentCulture, "\"{0}\"=multi_sz:", name);

 }

 for (int i = 0; i < values.Length; i++)

 {

 if (i != 0)

 {

 sb.Append(",");

 }

 sb.AppendFormat(CultureInfo.CurrentCulture, "\"{0}\"", values[i]);

 }

 sb.Append("\r\n");

 break;

 case RegistryValueKind.Binary:

 byte[] bytes = (byte[])key.GetValue(name);

 if (name.Equals(Default))

 {

 sb.Append("@=hex:");

 }

 else

 {

 sb.AppendFormat(CultureInfo.CurrentCulture, "\"{0}\"=hex:", name);

 }

 int j = 0;

 for (int i = 0; i < bytes.Length; i++)

 {

 // Display each byte as two hexadecimal digits.

 if (i == (bytes.Length - 1))

 {

 sb.AppendFormat(CultureInfo.CurrentCulture, "{0:X2}", bytes[i]);

 }

 else

 {

 sb.AppendFormat(CultureInfo.CurrentCulture, "{0:X2},", bytes[i]);

 }

 ++j;

 if (j == 25)

 {

 j = 0;

 sb.Append("\\\r\n");

 }

 }

 sb.Append("\r\n");

 break;

 }

 }

 由于Value有不同的数据类型,导出的时候根据数据类型来导出不同的格式。key.GetValueKind()函数可以取出Key数据类型RegistryValueKind。

 程序运行效果

 
 
 
作者:Jake.NET

查看原文地址
 

0
相关文章