读写注册表

使用
RegistryManager rwRgs
=new RegistryManager() ;
        
private void button4_Click(object sender, System.EventArgs e)
        
{
            
string str1=rwRgs.ReadSettings("myName") ;
            
if(str1!="")
                MessageBox.Show(str1) ;
        
        }



        
private void button5_Click(object sender, System.EventArgs e)
        
{
            
if(rwRgs.SaveSettings("myName","furenjun"+System.DateTime.Now.ToString()))
                MessageBox.Show(
"save Success") ;

  
        }


        
private void button6_Click(object sender, System.EventArgs e)
        
{
            
if(rwRgs.DeleteValue("myName"))
                MessageBox.Show(
"del Success") ;
        }


        
private void button7_Click(object sender, System.EventArgs e)
        
{
             
if(rwRgs.CountValue() >0)
                 MessageBox.Show (rwRgs.CountValue().ToString() );
        }


        
private void button8_Click(object sender, System.EventArgs e)
        
{

            
string[] str1=rwRgs.GetSubKeyValueNames();
            str1
=rwRgs.GetMySubKeyNames();  
            
if(str1!=null)
            
{
                
                
int i=str1.Length;
                MessageBox.Show(i.ToString() ) ;
                
string s1="";
                
for(int j=0;j<i;j++)
                
{
                    s1
+=str1[j]+" ";
                }

                MessageBox.Show(s1.ToString() ) ;

            }

        }


        
private void button9_Click(object sender, System.EventArgs e)
        
{
            MessageBox.Show ( Application.ProductName);
        }
using System;
using System.Windows.Forms;
using Microsoft.Win32;
namespace ReadWriteRegiest
{
    
/// <summary>
    
/// RegistryManager 的摘要说明。
    
/// </summary>

    public class RegistryManager
    
{
        
public RegistryManager()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }


        
string myKeyStr="frj";
        
string mySubKeyStr="frjChild";
        
public string myKey
        
{
            
get{return myKeyStr;}
            
set{myKeyStr=value;}

        }


        
public string mySubKey
        
{
            
get{return mySubKeyStr;}
            
set{mySubKeyStr=value;}

        }

        
        
/// <summary>
        
/// 保存键值
        
/// </summary>
        
/// <param name="mySetValueName"></param>
        
/// <param name="mySetValue"></param>
        
/// <returns></returns>

        public  bool SaveSettings(string mySetValueName,string mySetValue)
        
{
            

            RegistryKey softwareKey
=Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows",true);
            RegistryKey frjKey
=softwareKey.CreateSubKey(myKey) ;
            RegistryKey frjSubKey
=frjKey.CreateSubKey(mySubKey) ;
            
try
            
{    
                frjSubKey.SetValue(mySetValueName,mySetValue) ;
            }

            
catch(System.Exception e1)
            
{
                MessageBox.Show(e1.ToString(),
"保存键值错误",MessageBoxButtons.OK ,MessageBoxIcon.Information );

                frjSubKey.Close();
                frjKey.Close();
                
return false;
            }


            frjSubKey.Close();
            frjKey.Close();
            
return true;
        }



        
/// <summary>
        
/// 读键值
        
/// </summary>
        
/// <param name="mySetValueName"></param>
        
/// <returns></returns>

        public string  ReadSettings(string mySetValueName)
        
{
            
string ReadValueStr="";
            
            RegistryKey softwareKey
=Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows",true);
            RegistryKey frjKey
=softwareKey.OpenSubKey(myKey) ;
            
if(frjKey==null)
            
{
                frjKey.Close();
                
return ReadValueStr;
            }

            RegistryKey frjSubKey
=frjKey.OpenSubKey (mySubKey) ;
            
try
            
{    
                
if(frjSubKey==null)
                
{
                    frjSubKey.Close();
                    frjKey.Close();
                    
return ReadValueStr;
                }

                ReadValueStr
=frjSubKey.GetValue(mySetValueName).ToString()  ;
            }

            
catch(System.Exception e1)
            
{
                MessageBox.Show(e1.ToString(),
"读注册表错误",MessageBoxButtons.OK ,MessageBoxIcon.Information );

            }

            
            frjSubKey.Close();
            frjKey.Close();
            
return ReadValueStr;
            

        }



        
/// <summary>
        
/// 删除键值
        
/// </summary>
        
/// <param name="mySetValueName"></param>
        
/// <returns></returns>

        public bool DeleteValue(string mySetValueName)
        
{
            
            
            
//                RegistryKey MyReg = Registry.CurrentUser.OpenSubKey
            
//                ("SOFTWARE\\SomeCompany\\SomeApp\\SomeVer", true);

            RegistryKey softwareKey
=Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows",true);
            
            RegistryKey frjKey
=softwareKey.OpenSubKey(myKey) ;
            
if(frjKey==null)
            
{
                frjKey.Close();
                
return false;
            }

            RegistryKey frjSubKey
=frjKey.OpenSubKey (mySubKey) ;
            
try
            
{    
                
if(frjSubKey==null)
                
{
                    frjSubKey.Close();
                    frjKey.Close();
                    
                    
return false;
                }

                
//frjSubKey.DeleteSubKeyTree(mySubKey) ; //递归删除子项和任何子级子项。字符串 subKey 不区分大小写。
                
//                备注
                
//必须具有适当权限才能删除子项及其目录树。
                
//警告   删除特定的项将移除目录树中该项下的所有项,并且不提供任何警告。
                
//如果想仅在子项没有子级子项时才删除该子项,请改用 DeleteSubKey。

                frjSubKey.DeleteValue(mySetValueName,
true);


            }

            
catch(System.Exception e1)
            
{
                MessageBox.Show(e1.ToString(),
"删除键值出错",MessageBoxButtons.OK ,MessageBoxIcon.Information );
                
                frjSubKey.Close();
                frjKey.Close();
                
return false;

            }

            
            frjSubKey.Close();
            frjKey.Close();
            
return true;
            
        }



        
/// <summary>
        
/// 检索项中值的计数
        
/// </summary>
        
/// <returns></returns>

        public int  CountValue( )
        
{
            
int i=0;
            RegistryKey softwareKey
=Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows",true);
            RegistryKey frjKey
=softwareKey.OpenSubKey(myKey) ;
            
if(frjKey==null)
            
{
                frjKey.Close(); 
                
return i;
            }

                
            RegistryKey frjSubKey
=frjKey.OpenSubKey (mySubKey) ;
            
try
            
{    
                
if(frjSubKey==null)
                
{
                    frjSubKey.Close();
                    frjKey.Close();
                    
return i;
                }

                
            }

            
catch(System.Exception e1)
            
{
                MessageBox.Show(e1.ToString(),
"统计检索项中值出错",MessageBoxButtons.OK ,MessageBoxIcon.Information );
                frjSubKey.Close();
                frjKey.Close();
                
return 0;

            }

            
            i
=frjSubKey.ValueCount;  
            frjSubKey.Close();
            frjKey.Close();

            
return i;
        }


         

        
/// <summary>
        
/// 检索与此项值关联的所有值名称的字符串数组
        
/// </summary>
        
/// <returns></returns>

        public string[] GetSubKeyValueNames()
        
{
            
string[] ValueNames=null
            RegistryKey softwareKey
=Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows",true);
            RegistryKey frjKey
=softwareKey.OpenSubKey(myKey) ;
            
if(frjKey==null)
            
{
                frjKey.Close(); 
                
return ValueNames;
            }

                
            RegistryKey frjSubKey
=frjKey.OpenSubKey (mySubKey) ;
            
try
            
{    
                
if(frjSubKey==null)
                
{
                    frjSubKey.Close();
                    frjKey.Close();
                    
return ValueNames;
                }

                ValueNames
=frjSubKey.GetValueNames() ;
            }

            
catch(System.Exception e1)
            
{
                MessageBox.Show(e1.ToString(),
"统计检索项中值出错",MessageBoxButtons.OK ,MessageBoxIcon.Information );
                frjSubKey.Close();
                frjKey.Close();
                
return ValueNames;

            }

            
              
            frjSubKey.Close();
            frjKey.Close();

            
return ValueNames;

        }



        
        
/// <summary>
        
/// To obtain a list of all the subkeys (child keys) that exist within your present RegistryKey object
        
/// </summary>
        
/// <returns></returns>

        public string[] GetMySubKeyNames()
        
{
            
string[] mySubKeyNames=null
            RegistryKey softwareKey
=Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows",true);
            RegistryKey frjKey
=softwareKey.OpenSubKey(myKey) ;
            
if(frjKey==null)
            
{
                frjKey.Close(); 
                
return mySubKeyNames;
            }

            mySubKeyNames
=frjKey.GetSubKeyNames();  

            RegistryKey frjSubKey
=frjKey.OpenSubKey (mySubKey) ;
            
try
            
{    
                
if(frjSubKey==null)
                
{
                    frjSubKey.Close();
                    frjKey.Close();
                    
return mySubKeyNames;
                }

                
//mySubKeyNames=frjSubKey.GetSubKeyNames()  ;
            }

            
catch(System.Exception e1)
            
{
                MessageBox.Show(e1.ToString(),
"统计检索项中值出错",MessageBoxButtons.OK ,MessageBoxIcon.Information );
                frjSubKey.Close();
                frjKey.Close();
                
return mySubKeyNames;

            }

            
              
            frjSubKey.Close();
            frjKey.Close();

            
return mySubKeyNames;

        }


        
public bool AutoRunProgram()
        
{
            
            
string Pname=Application.ProductName;
            
string ProgramNameAndPath= Application.StartupPath+@"\"+Pname+".exe";
            RegistryKey softwareKey
=Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run",true);
            
try
            
{
                
if(softwareKey==null)
                
{
                    
//如果子键不存在则创建之
                    softwareKey=Registry.LocalMachine.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run");

                }

                
string[] CheckPname=softwareKey.GetValueNames(); 
                
int i=CheckPname.Length;
//                MessageBox.Show(i.ToString() ) ;
                bool find=false;
                
int j=0;
                
while(j<&& !find)
                
{
                    
if(CheckPname[j]==Pname)
                    
{    
                        find
=true;
//                        MessageBox.Show(j.ToString() +"   "+CheckPname[j] );
                    }

                    j
++;

                }

                 
                
if(!find)   
                
{
                    
//在注册表中设置自动启动程序
                    softwareKey.SetValue(Pname, ProgramNameAndPath) ;
                }

                
else
                
{
                    
if(softwareKey.GetValue(Pname).ToString() !=ProgramNameAndPath )
                        softwareKey.SetValue(Pname, ProgramNameAndPath) ;
//                    else
//                        MessageBox.Show("已经有了") ;
                }

            }

            
catch
            
{
                softwareKey.Close();  
                
return false;
            }

            softwareKey.Close(); 
            
return true;
        }


    }

}

原文地址:https://www.cnblogs.com/furenjun/p/387806.html