vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Dateisystem · Dateien - allgemein   |   VB-Versionen: VB.NET27.09.06
ProcessEx - "Öffnen mit..." Dialog (VB 2005)

"Öffnen mit..." Dialog bei Bedarf automatisch anzeigen

Autor:   Roland WutzkeBewertung:  Views:  10.736 
www.vb-power.netSystem:  WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 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ß...



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2020 vb@rchiv Dieter OtterAlle 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.