Autor Beitrag
Christoph1972
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Sa 26.09.09 15:34 
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
ausblenden 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)
ausblenden 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);


//Parent Fenster setzen.
Win32Api.SetParent(process.MainWindowHandle, parentContainer.Handle);

//Fenster anzeigen.
Win32Api.ShowWindow(process.MainWindowHandle, Win32Api.SW_MAXIMIZE);



Wenn so versuche ich den Prozess wieder in den Vordergrung zu bringen:
ausblenden 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.

_________________
Gruß
Christoph
Christoph1972 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Sa 26.09.09 22:14 
So, ich habe herausgefunden, das der Prozess beendet wird, sobald .Hide oder .Visible = false des MdiChild aufgerufen wird. Das ist natürlich blöd. Warum ist das so? Für mich erscheint das erst mal nicht logisch, der Prozess sollte doch weiter laufen, oder?

_________________
Gruß
Christoph
Christoph1972 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Di 29.09.09 17:33 
Hallo zusammen,

ich konnte das oben aufgeführte Problem bisher nicht lösen. Nun ist mir zudem aufgefallen, dass die Anwendung, die ich einbetten möchte sich nicht einbetten läst. Bisher habe ich immer mit dem Notepad getestet und nun das. Kennt hier jemand den Grund, warum sich scheinbar manche Programme nicht mit dieser WinApi einbetten lassen?
Wie es aussieht muss ich mein Vorhaben vorerst auf Eis legen, mit der Black Box komme ich nicht weiter. Vielleicht erhalte ich ja doch noch eine Antwort, die mir weiterhilft!?

_________________
Gruß
Christoph