Mega Code Archive

 
Categories / C# Tutorial / Windows
 

Registry Tree With Class

using System; using System.Drawing; using System.IO; using System.Windows.Forms; using Microsoft.Win32;   public class RegistryTreeClass: TreeView   {     public RegistryTreeClass()     {       ImageList = new ImageList();       ImageList.Images.Add(new Bitmap(GetType(), "CLOSED.BMP"));       ImageList.Images.Add(new Bitmap(GetType(), "OPEN.BMP"));       RootNodes();     }     protected override void OnBeforeExpand(TreeViewCancelEventArgs e)     {       base.OnBeforeExpand(e);       BeginUpdate();       foreach (TreeNode tn in e.Node.Nodes)       {         AddBranch(tn);       }       EndUpdate();     }          public void RootNodes()     {       BeginUpdate();       TreeNode tnHKCR = new TreeNode("HKEY_CLASSES_ROOT",0,1);       Nodes.Add(tnHKCR);       AddBranch(tnHKCR);       TreeNode tnHKCU = new TreeNode("HKEY_CURRENT_USER",0,1);       Nodes.Add(tnHKCU);       AddBranch(tnHKCU);       TreeNode tnHKLM = new TreeNode("HKEY_LOCAL_MACHINE",0,1);       Nodes.Add(tnHKLM);       AddBranch(tnHKLM);       TreeNode tnHKU = new TreeNode("HKEY_USERS",0,1);       Nodes.Add(tnHKU);       AddBranch(tnHKU);       SelectedNode = tnHKLM;       EndUpdate();     }     public void AddBranch(TreeNode tn)     {       if (tn.Nodes.Count > 0) return;       string strRegistryPath = tn.FullPath;       RegistryKey regBranch = null;       if (strRegistryPath.StartsWith("HKEY_CLASSES_ROOT"))         regBranch = Registry.ClassesRoot;       else if (strRegistryPath.StartsWith("HKEY_CURRENT_USER"))         regBranch = Registry.CurrentUser;       else if (strRegistryPath.StartsWith("HKEY_LOCAL_MACHINE"))         regBranch = Registry.LocalMachine;       else if (strRegistryPath.StartsWith("HKEY_USERS"))         regBranch = Registry.Users;       RegistryKey regSubKey = null;       try       {         if (null != tn.Parent)         {           // We need the path minus the top level tree.           int nPosPathSeparator = strRegistryPath.IndexOf(this.PathSeparator);           string strSubkey = strRegistryPath.Substring(nPosPathSeparator+1);           regSubKey = regBranch.OpenSubKey(strSubkey);         }         else           regSubKey = regBranch;       }       catch       {         return;       }       string[] astrSubkeyNames = regSubKey.GetSubKeyNames();       for (int i=0; i < astrSubkeyNames.Length; i++)       {         TreeNode tnBranch = new TreeNode(astrSubkeyNames[i],0,1);         tn.Nodes.Add(tnBranch);       }     }   }   public class MainForm : System.Windows.Forms.Form   {     private RegistryTreeClass rtvRegistry;     public MainForm()     {       InitializeComponent();       this.rtvRegistry = new RegistryTreeClass();       this.SuspendLayout();       this.rtvRegistry.Dock = System.Windows.Forms.DockStyle.Fill;       this.rtvRegistry.ImageIndex = -1;       this.rtvRegistry.Name = "rtvRegistry";       this.rtvRegistry.SelectedImageIndex = -1;       this.rtvRegistry.Size = new System.Drawing.Size(292, 273);       this.rtvRegistry.TabIndex = 0;       this.Controls.AddRange(new System.Windows.Forms.Control[] {                                       this.rtvRegistry});       this.ResumeLayout(false);     }     private void InitializeComponent()     {       this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);       this.ClientSize = new System.Drawing.Size(292, 273);       this.Name = "MainForm";       this.Text = "Registry with class";       this.Load += new System.EventHandler(this.Form1_Load);     }     static void Main()      {       Application.Run(new MainForm());     }     private void Form1_Load(object sender, System.EventArgs e)     {          }   }