- // © Andrey Bushman, 2013 
- using System; 
- using Microsoft.Win32; 
-   
- using cad = Autodesk.AutoCAD.ApplicationServices.Application; 
- using App = Autodesk.AutoCAD.ApplicationServices; 
- using Db = Autodesk.AutoCAD.DatabaseServices; 
- using Ed = Autodesk.AutoCAD.EditorInput; 
- using Rtm = Autodesk.AutoCAD.Runtime; 
- using Win = Autodesk.AutoCAD.Windows; 
- using System.IO; 
-   
- [assembly: Rtm.CommandClass(typeof(Bushman.CAD.Problems.Commands))] 
- [assembly: Rtm.ExtensionApplication(typeof(Bushman.CAD.Problems.Commands))] 
-   
- namespace Bushman.CAD.Problems { 
-   
-         public class Commands : Rtm.IExtensionApplication { 
-   
-                 internal static Win.PaletteSet palette_set = null; 
-   
-                 [Rtm.CommandMethod("cmd_1", Rtm.CommandFlags.Modal)] 
-                 public void Command_1() { 
-                         Ed.Editor ed = cad.DocumentManager.MdiActiveDocument.Editor; 
-                         App.IConfigurationSection cp = cad.UserConfigurationManager.OpenCurrentProfile(); 
-   
-                         const String name = "Bushman"; 
-                         // This names can to contain the spaces 
-                         const String name2 = "My Some Application"; 
-                         const String propName = "Property 1"; 
-                         // This settings will created in the registry (HKCU) 
-                         App.IConfigurationSection section = cp.ContainsSubsection(name) ? 
-                                 cp.OpenSubsection(name) : cp.CreateSubsection(name); 
-   
-                         App.IConfigurationSection section2 = section.ContainsSubsection(name2) ? 
-                                 section.OpenSubsection(name2) : section.CreateSubsection(name2); 
-   
-                         section2.WriteProperty(propName, "Hello, World!"); 
-                         String cprofile = cad.GetSystemVariable("cprofile") as String; 
-                         String path = Db.HostApplicationServices.Current.UserRegistryProductRootKey 
-                                 + @"\Profiles\" + cprofile; 
-   
-                         using (RegistryKey regKey = Registry.CurrentUser.OpenSubKey(path, false)) { 
-                                 using (RegistryKey regKey2 = regKey.OpenSubKey(name).OpenSubKey(name2)) { 
-                                         String value = regKey2.GetValue(propName, String.Empty) as String; 
-                                         ed.WriteMessage("Register: {0}\n", regKey2.Name); 
-                                         ed.WriteMessage("The register is successfully changed!\n"); 
-                                 } 
-                         } 
-                 } 
-   
-                 [Rtm.CommandMethod("cmd_2", Rtm.CommandFlags.Modal)] 
-                 public void Command_2() { 
-                         Ed.Editor ed = cad.DocumentManager.MdiActiveDocument.Editor; 
-                         if (palette_set == null) { 
-                                 // This settings will be saved into the  
-                                 // %AppData%\Autodesk\AutoCAD 2014\R19.1\enu\Support\Profiles\Unnamed Profile\Profile.aws 
-                                 // if the current profile is <<Unnamed Profile>>. 
-                                 palette_set = new Win.PaletteSet("My Palette", 
-                                         new Guid("{49DBC66F-21BE-4D9F-A5A9-BA750543042E}")); 
-                                 palette_set.Load += new Win.PalettePersistEventHandler(palette_set_Load); 
-                                 cad.BeginQuit += new EventHandler(cad_BeginQuit); 
-                         } 
-   
-                         palette_set.KeepFocus = true; 
-                         palette_set.Visible = true; 
-                 } 
-   
-                 static App.IConfigurationSection _palette_set = null; 
-   
-                 void cad_BeginQuit(object sender, EventArgs e) { 
-                         palette_set_Save(null, _palette_set); 
-                 } 
-   
-                 // This names can't to contain the spaces! 
-                 const String name = "AAA"; 
-                 const String name2 = "BBB"; 
-                 const String val_1_name = "Value_1"; 
-                 const String val_2_name = "Value_2"; 
-   
-                 void palette_set_Load(object sender, Win.PalettePersistEventArgs e) { 
-                         App.IConfigurationSection section = _palette_set = e.ConfigurationSection; 
-                         App.IConfigurationSection subsection = null; 
-                         App.IConfigurationSection subsection2 = null; 
-   
-                         if (!section.IsReadOnly) { 
-                                 subsection = section.ContainsSubsection(name) ? 
-                                 section.OpenSubsection(name) : section.CreateSubsection(name); 
-   
-                                 if (!subsection.IsReadOnly) { 
-                                         subsection2 = subsection.ContainsSubsection(name2) ? 
-                                         subsection.OpenSubsection(name2) : subsection.CreateSubsection(name2); 
-                                 } 
-                                 Int32 val_1 = (Int32)subsection2.ReadProperty(val_1_name, 100); 
-                                 Int32 val_2 = (Int32)subsection2.ReadProperty(val_2_name, 200); 
-                         } 
-                 } 
-   
-                 void palette_set_Save(object sender, App.IConfigurationSection section) { 
-                         App.IConfigurationSection subsection = null; 
-                         App.IConfigurationSection subsection2 = null; 
-                         if (section != null && !section.IsReadOnly) { 
-                                 // TODO: Problem is here. 
-                                 // Here execution of code interrupts... Maybe IConfigurationSection is disposed already... 
-                                 subsection = section.ContainsSubsection(name) ? 
-                                 section.OpenSubsection(name) : section.CreateSubsection(name); 
-   
-                                 if (!subsection.IsReadOnly) { 
-                                         subsection2 = subsection.ContainsSubsection(name2) ? 
-                                         subsection.OpenSubsection(name2) : subsection.CreateSubsection(name2); 
-                                 } 
-                                 subsection2.WriteProperty(val_1_name, 700); 
-                                 subsection2.WriteProperty(val_2_name, 800); 
-                         } 
-                 } 
-   
-   
-                 public void Initialize() { 
-                         Ed.Editor ed = cad.DocumentManager.MdiActiveDocument.Editor; 
-                         ed.WriteMessage("The 'Hello World' is loaded... \n"); 
-                 } 
-   
-                 public void Terminate() { 
-                         // throw new NotImplementedException(); 
-                 } 
-         } 
- }