Rubrik: Dateisystem · Dateien - allgemein | VB-Versionen: VB.NET | 27.09.06 |
ProcessEx - "Öffnen mit..." Dialog (VB 2005) "Öffnen mit..." Dialog bei Bedarf automatisch anzeigen | ||
Autor: Roland Wutzke | Bewertung: | Views: 12.195 |
www.vb-power.net | System: WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Mit der Process Klasse aus dem Framework kann eine beliebige Anwendung, oder auch eine beliebige Datei mit der verknüpften Anwendung, gestartet werden. Startet man bspw. eine .doc-Datei, so wird automatisch Wordpad oder MS-Word gestartet und die .doc Datei gleich mit aufgerufen.
Startet man aber nun eine Datei, zu dem Windows keine verknüpfte Anwendung kennt, kommt es zu einem Fehler. Diesen Umstand macht sich die VB.Net 2005 Klasse clsPrcessEx zu Nutze und öffnet in diesem Fall automatisch den System Dialog "Öffnen mit..."
Die Klasse selber erbt die Framework Basisklasse Process und stellt zusätzlich die vierfach überladene Funktion StartEx zur Verfügung. Somit kann die Klasse genauso wie die Process Basisklasse genutzt werden. Der Aufruf einer Datei erfolgt dabei über die Funktion StartEx.
Treten beim Aufruf mit der StartEx-Funktion weitere Fehler auf, so werden diese (bspw. File not found, Access denied etc.) als Exception an die aufrufende Klasse (Form) zurückgegeben.
Nachfolgend die Klasse clsProcessEx:
Option Explicit On Option Strict On ''' <summary> ''' Stellt eine erweiterte Aufrufmethode für verknüpfte Dokumente ''' zur Verfügung. Bei Bedarf wird der System Dialog "Öffnen mit" ''' automatisch angezeigt, wenn keine verknüpfte Anwendung ''' festgelegt wurde. ''' </summary> ''' <remarks> ''' VB.Net 2005 Klassenmodul ''' September 2006 - VB-Power.net ''' http://www.vb-power.net ''' </remarks> Public Class clsProcessEx ' Process Basisklasse erben Inherits Process ''' <summary> ''' Startet die verknüpfte Anwendung. ''' </summary> Public Function StartEx() As Boolean Return DoProcessStart() End Function ''' <summary> ''' Startet die verknüpfte Anwendung. ''' </summary> ''' <param name="StartInfo"> ''' Die ProcessStartInfo, die die Informationen zum Starten eines Prozesses ''' enthält, einschließlich Dateiname und Befehlszeilenargumente. ''' </param> Public Function StartEx(ByVal StartInfo As ProcessStartInfo) As Boolean Me.StartInfo = StartInfo Return DoProcessStart() End Function ''' <summary> ''' Startet die verknüpfte Anwendung. ''' </summary> ''' <param name="FileName"> ''' Legt den zu startenden Dateinamen für den Prozess fest. ''' </param> Public Function StartEx(ByVal FileName As String) As Boolean Me.StartInfo.FileName = FileName Return DoProcessStart() End Function ''' <summary> ''' Startet die verknüpfte Anwendung. ''' </summary> ''' <param name="FileName"> ''' Legt den zu startenden Dateinamen für den Prozess fest. ''' </param> ''' <param name="Arguments"> ''' Legt die zusätzlichen Befehlszeilenargumente für den Prozess fest. ''' </param> Public Function StartEx(ByVal FileName As String, _ ByVal Arguments As String) As Boolean Me.StartInfo.FileName = FileName Me.StartInfo.Arguments = Arguments Return DoProcessStart() End Function ''' <summary> ''' Interne Methode: Startet den Prozess ''' </summary> Private Function DoProcessStart() As Boolean Try ' Basisprozess starten Return Me.Start() Catch win32ex As System.ComponentModel.Win32Exception ' Exception "Verknüpfte Anwendung nicht festgelegt" abfangen ' und System Dialog "Öffnen mit" ausführen. If win32ex.NativeErrorCode = 1155 Then Try With Me.StartInfo .Arguments = "shell32.dll,OpenAs_RunDLL " & .FileName .FileName = "rundll32.exe" .WorkingDirectory = Environment.SystemDirectory End With Return Me.Start() Catch ex As Exception Throw New System.Exception(ex.Message, ex.InnerException) Return False End Try Else Throw New System.Exception(win32ex.Message, win32ex.InnerException) Return False End If End Try End Function End Class
Ein einfaches Aufruf-Beispiel:
Try Dim ProcessEx As New clsProcessEx ProcessEx.StartEx("C:\Dokumente\MeineDatei.123") Catch ex As Exception MsgBox(ex.Message) End Try
Legen Sie als Parameter einen gültigen Dateinamen fest, zu dem es keine verknüpfte Anwendung gibt und sehen Sie selbst.
Viel Spaß...