| |

VB.NET - FortgeschritteneExterne 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 |  |
 | 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 |
  |
|
Neu! sevCoolbar 3.0 
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere InfosTipp des Monats Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
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
|
|