Aloha liebe Community,
ich habe ein kleines Problem. Mein Programm wird mit einem Parameter aufgerufen und soll dann etwas dynamisch hinzufügen, dies klappt auch, jedoch soll sich das Programm bei der nächsten Parameterübergabe nicht noch einmal öffnen, sondern dann wieder der Inhalt zum alten Programm hinzugefügt werden. Das Verhindern des zweiten Startes hab ich schon herausgefunden:
static void Main()
{
bool createdNew;
System.Threading.Mutex mutex = new System.Threading.Mutex(true, Application.ProductName, out createdNew);
if (createdNew)
{
// bitte Form1 ersetzen
Application.Run(new Form1());
// und auch wieder Freigeben besser ist besser
mutex.ReleaseMutex();
}
else
{
get();
MessageBox.Show("Programm wurde bereits gestartet!", "Info", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Jedoch hapert es jetzt daran dem alten Prozess den neuen Parameter zu übergeben. Hierbei hab ich jetz folgendes:
static void get()
{
string name = Assembly.GetExecutingAssembly().GetName().Name;
int currentId = Process.GetCurrentProcess().Id;
EnumThreadDelegate callbackDelegate = new EnumThreadDelegate(Callback);
foreach (Process p in Process.GetProcessesByName(name))
{
if (p.Id != currentId)
{
IntPtr mainwindowHandle = p.MainWindowHandle;
if (mainwindowHandle != IntPtr.Zero)
{
StringBuilder str = new StringBuilder();
str.Append("asdf");
SendMessage(mainwindowHandle, 0x8000 + 1, (IntPtr)(0x000C),str);
}
//Wenn die Anwendung kein eingetragenes hauptfenser hat:
else
{
foreach (ProcessThread thread in p.Threads)
{ EnumThreadWindows(thread.Id, callbackDelegate, (IntPtr)0); }
}
//---
}
}
}
Jedoch hab ich erlich gesagt keine ahnung, wie ich das jetzt im alten Programm abrufen soll. Bis jetzt hab ich da nur
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
}
auf die Reihe bekommen, weiß aber nicht wie ich weiter vorgehen soll. Ich hoffe ihr könnt mir helfen und meine Fehler mir aufdecken, bzw mir weiterhelfen.
Vielen Dank für Antworten.
Mit freundlichem Gruß
euer Nathan
Schau dir mal die WCF an, damit kannst du wunderbar mit anderen Prozessen kommunizieren.
Da gibt es mehrere Möglichkeiten. Z.B.:*WCF/Remoting *WindowMessages *NamedPipes
Aber wenn du [FAQ] mehrere Programminstanzen verhindern (inkl. Parameterübergabe) ordentlich gelesen hättest: Da wird auf Andere Instanz benachrichtigen (Window-Messages) verwiesen, wo es schon fertigen Code dafür gibt.