Hallo zusammen,
ich hab mal ne frage zum Eplan Scripting:
ich versuche Makros per Skript auf Seiten zu platzieren,
wenn ich ein Seitenmakro via Skript einfüge, kann ich den folgenden Dialog per "SendKeys" bestätigen:
Code:
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Scripting;
public class InsertPageMacro
{
[Start]
public void InsertPageMacroVoid()
{
string strFilename = @"D:\test\Greifer\FG001.emp";
Parallel.Invoke(() =>InsertMacro(strFilename),KeyPress);
}
private static void InsertMacro(string strFilename)
{
ActionCallingContext oAcc = new ActionCallingContext();
CommandLineInterpreter oCLI = new CommandLineInterpreter();
oAcc.AddParameter("filename", strFilename);
oCLI.Execute("XMInsertPageMacro", oAcc);
}
private void KeyPress()
{
Thread.Sleep(1000);
SendKeys.SendWait("{TAB}");
Thread.Sleep(100);
SendKeys.SendWait("{TAB}");
Thread.Sleep(100);
SendKeys.SendWait("{ENTER}");
Thread.Sleep(100);
SendKeys.SendWait("{TAB}");
Thread.Sleep(100);
SendKeys.SendWait("{TAB}");
Thread.Sleep(100);
SendKeys.SendWait("{ENTER}");
}
}
Wenn ich allerdings versuche per Script eine Fenstermakro abzulegen wird "Sendkeys" praktisch ignoriert:
Code:
using Eplan.EplApi.ApplicationFramework;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using Eplan.EplApi.Scripting;public class Script
{
[DeclareAction("MacroImport")]
[Start]
public void Action()
{
string macroFileName = @"D:\test\Makros\Allgemein\Abbruchstelle_PN.ema";
string pageName = "=Bsp/1";
editor(pageName);
Parallel.Invoke(() => InsertMacro(macroFileName), sKey);
}
private void InsertMacro(string macroFileName)
{
ActionCallingContext acc = new ActionCallingContext();
acc.AddParameter("Name", "XMIaInsertMacro");
acc.AddParameter("filename", macroFileName);
acc.AddParameter("variant", "0");
CommandLineInterpreter cli = new CommandLineInterpreter();
cli.Execute("XGedStartInteractionAction", acc);
Thread.Sleep(20);
}
private static void editor(string pageName)
{
ActionCallingContext acc2 = new ActionCallingContext();
acc2.AddParameter("PAGENAME", pageName); // Full page name
acc2.AddParameter("X", "20");
acc2.AddParameter("Y", "30");
CommandLineInterpreter cli2 = new CommandLineInterpreter();
cli2.Execute("edit", acc2);
Thread.Sleep(20);
}
private void sKey()
{
Thread.Sleep(500);
SendKeys.SendWait("{ENTER}");
}
}
Natürlich hab ich vorher das Forum durchsucht und bin auch auf die Posts gestoßen in denen das diskutiert wurde, aber eine Lösung hab ich dort nicht gefunden.
Aber ich denke (hoffe, glaube, denke, beschwöre) das es hierfür eine Lösung geben müsste, da es im ersten Skript ja auch funktioniert...
Ich bin für jegliche Inspiration offen...
Die Ansätze API, ECC, usw. sind mir bekannt, kommen aber preislich eher nicht in Frage.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP