Hallo Leute,
ich habe mal wieder eine (für mich) interessante Aufgabenstellung. Und zwar möchte ich eine Fremdanwendung in einem MdiChild einbetten, das funktioniert schon mal ohne Probleme. Wenn das Child einmal versteckt wurde, ist nach dem Neuaufruf die Fremdanwendung nicht mehr sichtbar. Ich schaffe es einfach nicht die Fremdanwendung in den Vordergrund zu bringen: Hier mal mein Code:
Klasse mit DllImport
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| public class Win32Api { [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport("user32.dll", SetLastError = true)] public static extern bool BringWindowToTop(IntPtr hWnd);
public const Int32 SW_MAXIMIZE = 3; } |
So starte ich die FAW und und bette sie ein (das funktioniert)
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| process = System.Diagnostics.Process.Start(application); process.WaitForInputIdle();
process.EnableRaisingEvents = true; process.Exited += new EventHandler(process_Exited);
Win32Api.SetParent(process.MainWindowHandle, parentContainer.Handle);
Win32Api.ShowWindow(process.MainWindowHandle, Win32Api.SW_MAXIMIZE); |
Wenn so versuche ich den Prozess wieder in den Vordergrung zu bringen:
C#-Quelltext
1:
| Win32Api.BringWindowToTop(process.MainWindowHandle); |
Das funktioniert leider nicht, auch nicht in der Kombination mit ShowWindow, um das Fenster wieder zu maximieren.
Hat hier jemand eine Idee wie ich die Fremdanwendung wieder in den Vordergrund bekomme? Oder gibt es generell eine bessere Lösung? Schön wäre es, wenn ich auch die CloseBox & MinimizeBox unter Kontrolle hätte, oder die Titelleiste ganz ausblenden könnte, damit der Prozess nur noch über meine Anwendung beendet werden kann.