Получение запущенного Solidworks

Наткнулся я тут недавно на один курьез. А именно: если в системе установлены несколько Solidworks (к примеру 2015 и 2018), запущен 2015, открыта сборка. То в этом случае шаблонный код

var progId = "SldWorks.Application";
object obj = Marshal.GetActiveObject(progId);
return obj as SldWorks;

просто не сработает. Нужно обязательно указывать версию Solidworks

var progId = "SldWorks.Application.XX";

Так вот, чтобы не искать кучей методов по всему реестру (а это всего лишь запуск программы) какой же номер версии сейчас запущен, то используем следующий код (проверку на ошибки самостоятельно введите):

private SldWorks GetSolidSldWorks()
        {
            Process[] processes = Process.GetProcessesByName("SLDWORKS");
            Process SolidWorks = processes[0];
            int ID = SolidWorks.Id;

            try
            {
                return (SldWorks)
                    ROTHelper.GetActiveObjectList(ID.ToString())
                             .Where(keyvalue => (keyvalue.Key.ToLower().Contains("solidworks")))
                             .Select(keyvalue => keyvalue.Value)
                             .First();
            }
            catch
            {
                return null;
            }
        }

Класс ROTHelper скачать тут