/// <summary>
 /// Creates an instance of SolidWorks class
 /// </summary>
 /// <param name="version">Information about a version in SWVersion class format.</param>
 public SolidWorks(SWVersion version)
 {
     rotTimer = new Timer();
     rotTimer.Elapsed += UpdateROT;
     _ROT = ROTHelper.GetActiveObjectList(String.Empty);
     _instance = null;
     swProcess = null;
     swVersion = version;
     ProcessEnded += ProcessHasEnded;
 }
        public static void ClearCMToolbar(SWVersion version)
        {
            File.WriteAllText("C:\\Temp\\reg.reg", @"Windows Registry Editor Version 5.00

            [-HKEY_CURRENT_USER\" + version.RegPath + @"\User Interface\CommandManager]");
            //so that toolbars in CommandManager mode are not corrupted

            Process regProc = new Process();
            regProc.StartInfo.FileName = "regedit";
            regProc.StartInfo.Arguments = "/s C:\\Temp\\reg.reg";
            regProc.Start();
            regProc.WaitForExit();
        }
        public void OverrideSWSettings(SWVersion version, SWSetting setting)
        {
            string baseKey = RegHKCU + version.RegPath + "\\";

            string pdmPartPath=null;
            string pdmAssyPath=null;
            string pdmDrwPath=null;
            string bomTable=null;
            string weldTable=null;
            string bendTable=null;

            if (Directory.Exists(setting.PdmTemplateDirectory))
            {
                pdmPartPath = Directory.GetFiles(setting.PdmTemplateDirectory, "*.prtdot", SearchOption.AllDirectories).FirstOrDefault();
                pdmAssyPath = Directory.GetFiles(setting.PdmTemplateDirectory, "*.asmdot", SearchOption.AllDirectories).FirstOrDefault();
                pdmDrwPath = Directory.GetFiles(setting.PdmTemplateDirectory, "*.drwdot", SearchOption.AllDirectories).FirstOrDefault();
            }
            if (Directory.Exists(setting.TableTemplateDirectory))
            {
                bomTable = Directory.GetFiles(setting.TableTemplateDirectory, "*.sldbomtbt", SearchOption.AllDirectories).FirstOrDefault();
                weldTable = Directory.GetFiles(setting.TableTemplateDirectory, "*.sldwldtbt", SearchOption.AllDirectories).FirstOrDefault();
                bendTable = Directory.GetFiles(setting.TableTemplateDirectory, "*.sldbndtbt", SearchOption.AllDirectories).FirstOrDefault();
            }

            if (!String.IsNullOrWhiteSpace(pdmAssyPath))
                Registry.SetValue(baseKey + "Document Templates", "Default Assy Template", pdmAssyPath);
            if (!String.IsNullOrWhiteSpace(pdmPartPath))
                Registry.SetValue(baseKey + "Document Templates", "Default Part Template", pdmPartPath);
            if (!String.IsNullOrWhiteSpace(pdmDrwPath))
                Registry.SetValue(baseKey + "Document Templates", "Default Draw Template", pdmDrwPath);

            if (!String.IsNullOrWhiteSpace(bomTable))
                Registry.SetValue(baseKey + "Drawings", "Last BOM Template Path", bomTable);
            if (!String.IsNullOrWhiteSpace(weldTable))
                Registry.SetValue(baseKey + "Drawings", "Last Weldment Template Path", weldTable);
            if (!String.IsNullOrWhiteSpace(bendTable))
                Registry.SetValue(baseKey + "Drawings", "Last BendTable Template Path", bendTable);

            if (Directory.Exists(setting.PdmTemplateDirectory))
            {
                Registry.SetValue(baseKey + "ExtReferences", "Document Template Folders", setting.PdmTemplateDirectory);
            }
            if (Directory.Exists(setting.TableTemplateDirectory))
            {
                Registry.SetValue(baseKey + "ExtReferences", "Bend Table Template Folder", setting.TableTemplateDirectory);
                Registry.SetValue(baseKey + "ExtReferences", "BOM Template Folders", setting.TableTemplateDirectory);
                Registry.SetValue(baseKey + "ExtReferences", "Weld Table Template Folder", setting.TableTemplateDirectory);
                Registry.SetValue(baseKey + "ExtReferences", "Revision Table Template Folders", setting.TableTemplateDirectory);
                Registry.SetValue(baseKey + "ExtReferences", "Punch Table Template Folder", setting.TableTemplateDirectory);
            }

            if (!String.IsNullOrWhiteSpace(setting.DrwTemplates?.FirstOrDefault()?.SlddrtPath) && File.Exists(setting.DrwTemplates?.FirstOrDefault()?.SlddrtPath))
            {
                Registry.SetValue(baseKey + "ExtReferences", "Sheet Format Folders", Directory.GetParent(setting.DrwTemplates?.FirstOrDefault()?.SlddrtPath).FullName);
            }

            if (Directory.Exists(setting.WorkPath))
            {
                Registry.SetValue(baseKey + "General", "Last user path", setting.WorkPath);
                Registry.SetValue(baseKey + "ExtReferences", "Document Folders", setting.WorkPath);
            }
        }
        public bool WriteSWRegistrySettings(SWVersion version, List<RegistryEntry> regEntries)
        {
            try
            {
                RegistryKey baseKey = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64);
                RegistryKey regKey = baseKey.OpenSubKey(version.RegPath + "\\User Interface");
                regKey.DeleteSubKeyTree("CommandManager",false);
            }
            catch (Exception ex)
            {
                Debug.Print(ex.Message);
                ClearCMToolbar(version);
            }

            regEntries.ForEach(regEnt => Registry.SetValue(RegHKCU + version.RegPath + regEnt.KeyName, regEnt.EntryName, regEnt.EntryValueAsObject));

            return true;
        }
        public List<RegistryEntry> ParseSWSettings(SWVersion version, List<string> keysList)
        {
            List<RegistryEntry> regEntryList = new List<RegistryEntry>();

            foreach (var key in keysList)
            {
                RegistryKey baseKey = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64);
                RegistryKey rootKeyToExtract = baseKey.OpenSubKey(key);

                regEntryList.AddRange(ParseSelectedKey(rootKeyToExtract, true, RegHKCU + version.RegPath));
            }

            return regEntryList;
        }