using Eplan.EplApi.Scripting; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace EplanScripting.Scripts.PageMacro { class InsertMacro { [Start] public void Do() { string pathPageMacro = @"C:\temp\Seitenmacro.emp"; var pageMacro = GetMacroPage(pathPageMacro); InsertPageMacro(pageMacro); } public object GetMacroPage(string filePath) { var _MasterDataAssembly = AppDomain.CurrentDomain.GetAssemblies() .FirstOrDefault(a => a.FullName.StartsWith("Eplan.EplApi.DataModel")); var typePageMacro = _MasterDataAssembly.ExportedTypes.FirstOrDefault(t => t.Name == "PageMacro"); var pageMacro = Activator.CreateInstance(typePageMacro); var firstSelProject = GetSelectedProject(); var args = new object[] { filePath, firstSelProject }; pageMacro.DoMethod("Open", args); return pageMacro; } public object GetSelectedProject() { var _HEServicesAssembly = AppDomain.CurrentDomain.GetAssemblies() .FirstOrDefault(a => a.FullName.StartsWith("Eplan.EplApi.HEServices")); var typeSelectionSet = _HEServicesAssembly.ExportedTypes.FirstOrDefault(t => t.Name == "SelectionSet"); object selectionSet = Activator.CreateInstance(typeSelectionSet); //selectionSet.SetProp("LockProjectByDefault", false); selectionSet.SetProp("LockSelectionByDefault", false); IEnumerable selections = (IEnumerable)selectionSet.GetProp("SelectedProjects"); //foreach (var item in selection) //{ // MessageBox.Show(item.GetType().ToString()); //} if (selections.Count() > 0) { return selections.First(); } else { return null; } } public void InsertPageMacro(object pageMacro) { var _HEServicesAssembly = AppDomain.CurrentDomain.GetAssemblies() .FirstOrDefault(a => a.FullName.StartsWith("Eplan.EplApi.HEServices")); var typeInsert = _HEServicesAssembly.ExportedTypes.FirstOrDefault(t => t.Name == "Insert"); object insert = Activator.CreateInstance(typeInsert); var firstSelProject = GetSelectedProject(); var args = new object[] { pageMacro, firstSelProject, null, 2 }; insert.DoMethod("PageMacro", args); } } public static class Utils { public static object GetProp(this object obj, string name) { PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(obj); PropertyDescriptor prop = properties.Find(name, false); return prop.GetValue(obj); } public static object GetProp(this object obj, string name, int index) { Type type = obj.GetType(); var info = type.GetProperties().FirstOrDefault(p => p.ToString().Contains(name + " [Int32]")); if (info == null) { return null; } return info.GetValue(obj, new object[] { index }); } public static void SetProp(this object obj, string name, object value) { PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(obj); PropertyDescriptor prop = properties.Find(name, false); prop.SetValue(obj, value); } public static void SetProp(this object obj, string name, object value, int index) { Type type = obj.GetType(); var info = type.GetProperties().FirstOrDefault(p => p.ToString().Contains(name + " [Int32]")); info.SetValue(obj, value, new object[] { index }); } public static int ToInteger(this string txt) { int value = 0; if (int.TryParse(txt, out value)) { return value; } else { return 1; } } public static object DoMethod(this object obj, string name, object[] args) { var method = obj.GetType().GetMethods().FirstOrDefault(m => m.Name.Contains(name)); return method.Invoke(obj, args); } } }