C# - EXE in WinForm anzeigen?
Hi ich möchte eine EXE Datei starten und das Fenster was es ja anzeigt in meiner Winform in einem Panel anzeigen.
2 Antworten
Das geht mit reinem .NET Framework nicht. Dazu musst Du mithilfe des Windows-API das Parent Window Handle des gewünschten Fensters setzen.
Beispiel: https://www.fluxbytes.com/csharp/host-a-process-window-inside-your-applications-window/
Dann schau nach, ob's Fehler gab.
Bei der WinApi bekommst Du keine Exceptions sondern Fehlercodes, die Du auch selber abfragen musst. Für Letzteres gibt's die "Marshal.GetLastWin32Error"-Methode oder Du nutzt direkt die GetLastError-Funktion der WinApi.
Aber ob der Fehlercode hilfreich ist oder überhaupt das ursprüngliche Problem aufzeigt, ist eine ganz anderes Thema.
Aber stell dich auf viele Schwierigkeiten ein, die WinAPI ist weit schwieriger zu bedienen, als WinForms oder andere Frameworks und birgt sehr viel mehr Fallstricke.
Der Code sollte schon so funktionieren wie du es gebaut hast. Du musst aber daran denken, dass das Notepad-Fenster eine eigene Position hat (x, y, breite, höhe), die innerhalb deines Panels eventuell außerhalb des sichtbaren Bereichs liegt.
Du hast ja bereits die native MoveWindow auch importiert, damit kannst du das Notepad-Fenster verschieben nachdem es ins Panels versetzt wurde:
...
SetParent(p.MainWindowHandle, panel1.Handle);
MoveWindow(p.MainWindowHandle, 0, 0, panel1.Size.Width, panel1.Size.Height, true);
...
habs mit diesem code versucht und es startet auch das programm jedoch geht es zb bei notepad sofort wieder zu und es tut sich gar nix in der form