vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Externe Anwendung in eigenem MDI anzeigen 
Autor: bqstony
Datum: 04.02.09 15:15

Hallo zusammen

Ich habe gerade einen kleinen test gemacht um eine Externe Anwendung, zb notepad, in meinem .net MDI anzuzeigen. Das Funktioniert auch erstaundlich gut

Doch es gibt da einige schönheitsfehler,wie zb die Aktionen: maximieren minimieren werden nach einem ändern der Grösse des .net Fensters nicht korrekt an das mdichild weitergegeben.

Mein versuch war mit dit der Windows Appi Funktionen.

Gibt es dafür ev. auch eine .Net Möglichkeit? Ev geht die besser ohne jede kleinigkeit per Code nachkorigieren zu müssen.

Danke schonmal für eure Antwort.

PS: Der Code zum selber teste ;)
IST NUR EIN TEST!!
Public Class Form1
 
    ' benötigte API-Deklarationen
    Private Declare Function SetWindowLong Lib "user32" _
      Alias "SetWindowLongA" ( _
      ByVal hwnd As IntPtr, _
      ByVal nIndex As Integer, _
      ByVal dwNewLong As Integer) As Integer
 
    Private Declare Function SetParent Lib "user32" ( _
      ByVal hWndChild As IntPtr, _
      ByVal hWndNewParent As Integer) As Integer
 
    Private Declare Function GetWindowLong Lib "user32" _
      Alias "GetWindowLongA" ( _
      ByVal hwnd As IntPtr, _
      ByVal nIndex As Integer) As Integer
 
    Private Declare Function GetParent Lib "user32" _
      Alias "GetParent" ( _
      ByVal hwnd As IntPtr) As Integer
 
    Private Const WS_EX_MDICHILD = &H40&
    Private Const WS_EX_WINDOWEDGE = &H100&
    Private Const GWL_EXSTYLE = (-20)
 
    Private nOldStyle As Integer
    Private nOldParent As Integer
 
 
    Private myhWndChild As IntPtr
    Private myhWndMDI As IntPtr
 
    Private myProcess As Process                'Zum Starten eines Externen 
    ' Programmes
 
    ' beliebiges Fenster als Child-Form im MDI-Formular anzeigen
    Public Sub MakeChild(ByVal hWndChild As IntPtr, ByVal hWndMDI As IntPtr)
        ' zunächst den Original-Fensterstil und Parent merken
        nOldStyle = GetWindowLong(hWndChild, GWL_EXSTYLE)
        nOldParent = GetParent(hWndChild)
 
        ' jetzt das Fenster zum ChildForm der MDIForm machen
        SetParent(hWndChild, hWndMDI)
        SetWindowLong(hWndChild, GWL_EXSTYLE, WS_EX_MDICHILD Or _
          WS_EX_WINDOWEDGE)
    End Sub
 
 
    'Standart Instalations Pfad
    Private Shared _strProcessExe As String = "notepad.exe"       'Name der 
    ' Ausführungsdatei
    Private Shared _strProcessPfad As String = "C:\Programme\..."      'Pfad 
    ' zur ausführungs Datei ->Ohne abschliesenden Backslash
 
    ''' <summary>
    ''' Name der Ausführungsdatei OHNE den .exe anhang
    ''' </summary>
    Protected ReadOnly Property getProcessExeName() As String
        Get
            On Error Resume Next
            Dim strExeName As String
 
            strExeName = _strProcessExe.Replace(".exe", "")
 
            Return strExeName
        End Get
    End Property
 
 
    Private ReadOnly Property getProcess(Optional ByVal bNotStart As Boolean = _
      True) As Process
        Get
            Try
                'Auslesen aller Prcesse mit dem Keypad Pfad
                Dim processes As Process() = Process.GetProcessesByName( _
                  getProcessExeName)  'Process name ohne .exe angeben
 
                'Prozess überhaubt  vorhanden?
                If processes.Length < 1 And bNotStart = True Then
                    'Wen nicht, jetzt starten
                    'ShowWindow()
 
                    'zurückgeben des gestarteten Process
                    Return Me.myProcess
 
                ElseIf processes.Length > 1 Then
                    'alle überflüssigen wieder beenden
                    'For i As Integer = 1 To processes.Length - 1
                    '    processes(i).Kill()
                    'Next
 
                    'den übriggebliebenen Process zurückgeben
                    Me.myProcess = processes(0)
                    Return Me.myProcess
 
                Else
                    'den einen Process zurückgeben
                    Me.myProcess = processes(0)
                    Return Me.myProcess
                End If
            Catch ex As Exception
                Return Nothing
            End Try
        End Get
    End Property
 
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button1.Click
 
        'Lesse den Process Handle aus
        myhWndChild = getProcess.MainWindowHandle
        myhWndMDI = Me.Handle.ToInt32
 
 
        MakeChild(myhWndChild, myhWndMDI)
 
    End Sub
 
 
    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As _
      System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        SetWindowLong(myhWndChild, GWL_EXSTYLE, nOldStyle)
        SetParent(myhWndChild, nOldParent)
    End Sub
End Class

Cya At Frostwolf

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Externe Anwendung in eigenem MDI anzeigen2.279bqstony04.02.09 15:15
Re: Externe Anwendung in eigenem MDI anzeigen1.640VBExpress04.02.09 19:38

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel