Rubrik: Verschiedenes / Sonstiges | VB-Versionen: VB.NET | 02.04.08 |
Notepad.exe ( Editor ) in VB Oberflaeche integrieren - Anwendung "einfangen" Das Beispiel zeigt, wie sich der Windows Editor in die aufrufende Programmoberfläche einbetten lässt. | ||
Autor: Heinz Prelle | Bewertung: | Views: 34.541 |
www.visual-basic5.de | System: WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Mit nachfolgendem Beispiel wird gezeigt, wie sich eine fremde Anwendung (hier notepade.exe - Windows Editor) starten und in die eigene Anwendung einbetten lässt.
Erstellen Sie ein neues Projekt und platzieren auf die Form einen Button (Button1), sowie ein Panel-Control (PanelContainer). Das Panel-Control dient als Container-Objekt für die einzubettende Anwendung.
' COM-Interop einbinden. Imports System.Runtime.InteropServices Public Class Form1
''' <summary> ''' Die Klasse beinhaltet die benötigten Api-Funktionen und Konstanten. ''' </summary> Public Class Win32Api ' Die Api Funktion ShowWindow zeigt ein Fenster auf verschiedene Art an. ' ' Rückgabewert: ' Ungleich 0 wenn das Fenster vor dem Funktionsaufruf ' sichtbar war, sonst 0. ' Übergabewerte: ' hWnd: Handle des Fensters. ' nCmdShow: Konstante zum anzeigen des Fensters. <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ Public Shared Function ShowWindow( _ ByVal hWnd As IntPtr, _ ByVal nCmdShow As Integer) As Boolean End Function ' Die Api Funktion SetParent setzt ein neues Eltern-Fenster für ein ' bestimmtes Kind-Fenster. ' ' Rückgabewert: ' Wenn der Aufruf erfolgreich war wird das Handle des Eltern-Fensters ' zurückgegeben sonst 0. ' Übergabewerte: ' hWndChild: Handle des Kind-Fensters. ' hWndNewParent: Handle des Eltern-Fensters. <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ Public Shared Function SetParent( _ ByVal hWndChild As IntPtr, _ ByVal hWndNewParent As IntPtr) As IntPtr End Function ' Das Fenster wird maximiert angezeigt. Public Const SW_MAXIMIZE As Int32 = 3 ' (SW_...) usw. End Class
''' <summary> ''' Die Prozedur startet die übergebene Anwendung und setzt sie in die aufrufende Form. ''' </summary> ''' <param name="CallingApplication">bspw. notepad.exe</param> ''' <param name="p">Panel-Control, in das die Anwendung eingebettet werden soll</param> Private Sub SetApplicationAsChild(ByVal CallingApplication As String, _ ByVal p As System.Windows.Forms.Panel) ' Fehlerbehandlung einschalten. Try ' Process starten ( ... notepad.exe ... ). Dim hProcess As System.Diagnostics.Process = _ System.Diagnostics.Process.Start(CallingApplication) ' Siehe (... WaitForInputIdle ...) hProcess.WaitForInputIdle() ' Parent Fenster setzen. Win32Api.SetParent(hProcess.MainWindowHandle, p.Handle) 'Fenster anzeigen. Win32Api.ShowWindow(hProcess.MainWindowHandle, Win32Api.SW_MAXIMIZE) Catch ex As Exception ' Fehlerbeschreibung bei auftretenden Fehler anzeigen. 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 Button1.Click ' Dateiname des Editors Const APP_NAME As String = "notepad.exe" ' Prozedur mit dem Dateiname <APP_NAME> und das benötigte Anzeigefenster aufrufen. SetApplicationAsChild(APP_NAME, PanelContainer) End Sub
End Class