Hallo!
Ist es möglich eine fremde Anwendung in der eigenen Anwendung laufen zu lassen? Also als MDI-Child?
Habt ihr mir ein Schlagwort mit dem ich weiterkomme?
Danke.
/EDIT: Zwischenzeitlich habe ich doch was gefunden. Anscheinend ist es schon möglich. Allerdings muss beide Anwendungen in dem selben Thread laufen, bzw. muss der Zugriff von dem Thread kommen, der den GUI-Thread erzeugt hat:
Warum darf nur ein GUI-Thread existieren?
Doch wie bette ich eine fremde Anwendung in die eigene ein?
wenn beides Dot net anwendugen sind kannst du ja einfach auf die assamblys zugreifen und die entsprechende anwendung Starten
Wir Arbeiten eigendlich nicht wir nehmen nur das geld
wenn es wirklich externe, nicht .net anwendungen sind, kannst du dir mal die Win32 Funktionen FindWindow und SetParent anschauen.
Gibt hier im Forum sicher auch schon Beispiele.
mfg
serial
Ich bin weitergekommen:
public partial class Form1 : Form
{
[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
private string exeName = @"C:\Programme\Internet Explorer\iexplore.exe";
public Form1()
{
InitializeComponent();
Process p = null;
IntPtr appWin = IntPtr.Zero;
try
{
//Prozess starten
p = Process.Start(this.exeName);
//Auf Prozess warten
if (p.WaitForInputIdle(50000))
{
//Window Handle holen
appWin = p.MainWindowHandle;
}
}
catch (Exception ex)
{
MessageBox.Show(this, ex.Message, "Error");
}
if (appWin != IntPtr.Zero)
{
//In meine Form setzen
SetParent(appWin, this.Handle);
}
}
}
Mein Problem ist jetzt aber, dass der fremde Prozess (den ich einbinden will) zu früh da ist. Selbst mit WaitForInputIdle schaff ich es nicht ihn einzubetten.
Habt ihr eine Idee?
/EDIT: Das scheint irgendwie am IE7 zu liegen. Will ich z.B. Notepad einbinden, funktioniert es. Weiß jemand wieso?
Hallo msycho,
Allerdings muss beide Anwendungen in dem selben Thread laufen
das ist nicht möglich. Ein Thread ist immer genau einem Prozess zugeordnet.
herbivore