.exe innerhalb .net window starten

londo

Grünschnabel
hallo ardro,

ja konnt ich mir beinahe denke, war aber schon unterwegs als ich das schrieb.
werde gleich morgen früh wenn ich auf arbeit bin die lösung posten.
kannst so gegen 08.00 Uhr mit rechnen:)

schönen abend noch
 

londo

Grünschnabel
Guten Morgen,

hier nun meine Lösung für das oben beschriebene Problem.


Code:
Imports System.Runtime.InteropServices

Public Class FormEins
    Public Class Win32Api

        <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
        Public Shared Function ShowWindow( _
          ByVal hWnd As IntPtr, _
          ByVal nCmdShow As Integer) As Boolean
        End Function

        <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
        Public Shared Function SetParent(ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As IntPtr
        End Function

        Public Const SW_MAXIMIZE As Int32 = 3

    End Class

    Private Sub SetApplicationAsChild(ByVal CallingApplication As String, _
      ByVal p As System.Windows.Forms.Panel)
        Try

            Dim hProcess As System.Diagnostics.Process = System.Diagnostics.Process.Start(CallingApplication)
            hProcess.WaitForInputIdle()
            Win32Api.SetParent(hProcess.MainWindowHandle, p.Handle)
            Win32Api.ShowWindow(hProcess.MainWindowHandle, Win32Api.SW_MAXIMIZE)
        Catch ex As Exception
            MessageBox.Show(ex.Message.ToString(), "Info")
        End Try
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Const APP_NAME As String = "notepad.exe"
        SetApplicationAsChild(APP_NAME, Panel1)
    End Sub

End Class

Also Funktion ShowWindow fragt ab ob das Fenster vor dem Aufruf sichtbar war.
rückgabewert ungleich 0 wenn sichtbar ansonsten 0.

Funktion SetParent setzt ein neues Elternfenster für ein bestimmtes Kindfenster.
Rückgabewert Handle des Elternfensters ansonsten 0.

Die Prozedur SetApplicationAsChild startet das gewünschte Programm und stellt es in der aufrufenden Form dar.

naja und Button1_Click sollte wohl klar sein, löst das ganze aus.
kleine Anmerkung, steht das zu öffnende tool im syspath brauch man nur den namen des tools eingeben wie hier "notepad.exe" ansonsten muss der komplette Pfad angegeben werden, damit vb weiss wo es suchen muss.

beste grüße
 

Neue Beiträge