So, ich hab das jetzt wie folgt gelöst:
Public Class frmMain
'benötigte APIs
Private Declare Function SetParent Lib "user32.dll" (ByVal hWndChild As _
IntPtr, ByVal hWndNewParent As IntPtr) As IntPtr
Private Declare Function ShowWindow Lib "user32.dll" (ByVal hWnd As IntPtr, _
ByVal flag As Integer) As IntPtr
Public Declare Function MoveWindow Lib "user32" (ByVal hwnd As Int32, _
ByVal x As Long, ByVal y As Long, _
ByVal nWidth As Long, ByVal nHeight As Long, _
ByVal bRepaint As Boolean) As Boolean
'ShowWindow-Konstanten
Private Const SW_NORMAL As Integer = 1
'ProzessID des eingebetteten fensters merken
Private intProgrammID As Integer
Private Sub Starten
StartProgramm("cmd.exe", TabPage1, intProgrammID)
End Sub
Private Sub Stoppen
Try
Process.GetProcessById(intProgrammID).Kill()
Catch
End Try
End Sub
Private Sub StartProgramm(ByVal Programm As String, ByVal Seite As TabPage, _
ByRef ProgrammID As Integer)
'<übergebene Parameter>
'Programm = das Programm, das gestartet werden soll
'Seite = die Seite eines TabControls, auf der das Programm angezeigt
' werden soll
'ProgrammID = ProzessID des aufgerufenen Programms
' ByRef, um mit dem Aufruf des Programms der globalen Variable
' intProgrammID die ProzessID zu übergeben
' (wird in der Prozdur "Stoppen gebraucht)
'</übergebene Parameter>
Dim Handle As IntPtr 'MainWindowHandle des gestarteten Programms
'Programm starten
ProgrammID = Process.Start(Programm).Id
'Warten, bis aufgerufenes Programm ein MainWindowsHandle hat
Do
Application.DoEvents()
Loop Until Process.GetProcessById(ProgrammID).MainWindowHandle <> 0
Handle = Process.GetProcessById(ProgrammID).MainWindowHandle
'DOS-Box in Tabpage einbetten
SetParent(Handle, Seite.Handle)
'WindowState der DOS-Box auf "normal" setzen
ShowWindow(Handle, SW_NORMAL)
'DOS-Box auf TabPage zentrieren
MoveWindow(Handle, 10, 8, 670, 440, True)
End Sub
End ClassIm Beispiel könnte man das im Sub Starten abfackeln. Da ich aber 4 Programme starte, hab ich das über das Sub StartProgramm mit Parameterübergabe gemacht.
Die Subs Starten und Stoppen sind normalerweise Buttons. Der Lesbarkeit halber, habe ich hier auf die lange Button_Click(...)-Zeile verzichtet.
Gruß
Marcus
Beitrag wurde zuletzt am 18.01.14 um 18:39:03 editiert. |