Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0416: Öffnen von Dateien mit der ShellExecute

 von 

Beschreibung 

In VB gibt es den Shell-Befehl um externe Anwendungen zu starten.
Hierzu passend ist auch eine Funktion des Win32API verfügbar, welche es unter anderem möglich macht, die passende Anwendung zu einer Datei starten zu lassen. Zudem gibt es noch weitere Optionen die beim Shell-Befehl nicht verfügbar sind.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

GetShortPathNameA (GetShortPathName), ShellExecuteA (ShellExecute)

Download:

Download des Beispielprojektes [2,28 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Projekt1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Schaltfläche "Command2"
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Dateiauswahlliste "File1"
' Steuerelement: Verzeichnisauswahlliste "Dir1"
' Steuerelement: Festplattenauswahlliste "Drive1"


'Autor: Sebastian Karmann
'E-Mail: seak@activevb.de

Option Explicit

Private Const MAX_PATH As Long = 260&

Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" ( _
    ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long

Private Declare Function ShellExecute Lib "shell32.dll" Alias _
        "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation _
        As String, ByVal lpFile As String, ByVal lpParameters _
        As String, ByVal lpDirectory As String, ByVal nShowCmd _
        As Long) As Long

Private Sub Command1_Click()
    Dim path As String
    
    path = Space(MAX_PATH)
    Call GetShortPathName(File1.path & IIf(Right(File1.path, 1) = "\", "", "\") & _
        File1.FileName, path, MAX_PATH)
    
    Call ShellExecute(Me.hwnd, "Open", path, "", Dir1.path, 1)
End Sub

Private Sub Command2_Click()
    Unload Me
End Sub

Private Sub Dir1_Change()
    File1.path = Dir1.path
End Sub

Private Sub Drive1_Change()
    Dir1.path = Drive1.Drive
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Projekt1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 19 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Thorsten am 14.08.2006 um 14:39

Hallo Joseph,

der letzte Paramenter bei "ShellExecute" könnte Dir vielleicht weiterhelfen:

#define SW_HIDE 0
#define SW_SHOWNORMAL 1
#define SW_NORMAL 1
#define SW_SHOWMINIMIZED 2
#define SW_SHOWMAXIMIZED 3
#define SW_MAXIMIZE 3
#define SW_SHOWNOACTIVATE 4
#define SW_SHOW 5
#define SW_MINIMIZE 6
#define SW_SHOWMINNOACTIVE 7
#define SW_SHOWNA 8
#define SW_RESTORE 9
#define SW_SHOWDEFAULT 10
#define SW_FORCEMINIMIZE 11
#define SW_MAX 11

Kommentar von Joseph am 02.08.2006 um 21:36

Weiss jemand wie man Dateien im Hintergrund oeffnen kann?

Mfg

Kommentar von Jessica am 30.06.2006 um 11:45

Hey Ihr...

Ich möchte das gleich pog. , nu rmit VB.Net, leider bekomme ich da schwierigkeiten mit den Listboxen..
Wäre super lieb, wenn mir jemand helfen könnte!!

Gruss
Jessi

Kommentar von Fladimir am 11.05.2006 um 18:49

Ich versteh von dem hier kein Wort...
Das hier
http://www.microsoft.com/germany/msdn/library/visualtools/vb6/AusVisualBasicHerausDokumenteInZugehoerigenAnwendungenOeffnen.mspx?mfr=true
ist sehr gut erklärt, auch wenn man von microsoft sonst so viel schlechtes hört...

Kommentar von Rene am 02.04.2006 um 14:49

hi
habe jetzt meine Lösung herausgefunden habe,ich kann jetzt ALLE Datein öffnen die ich will (auch EXE. Datein) also wer wiesen will wie man seine Datein öffnen will (wirklich alle)

Der kann mir schreiben "sarejumu@aol.com" ich erkläre es cu

Kommentar von Rene am 28.03.2006 um 20:21

Was soll Das Bedeuten??????????


Private Sub Command1_Click()
Dim path As String =?????

path = Space(MAX_PATH) =glaube die Leertaste als Bewfehl

Call GetShortPathName(File1.path & IIf(Right(File1.path, 1) = _ =Warum
"\", "", "\") & _
File1.FileName, path, MAX_PATH)

Call ShellExecute(Me.hwnd, "Open", path, "", Dir1.path, 1)
End Sub

ich möchte einen Butten erstellen (in VB6) wo ich z.b. ein Lied mit dem Windows Media Player laufen lassen kann,weil in der EXE Datei die man dann erstellt hat wenn das Programm fertig ist es mit der API Funktion nicht läuft

brauche hilfe mache es für die Schule
wer wweiß wie es geht soll mir bitte mälen

Gruß Rene

Kommentar von rene am 19.03.2006 um 10:14

wie kann ich mit einem Butten ein lied abspielen das auch funktioniert wenn man davon eine exe Datei auf dem Destop ersstellt hat,weil wenn ich die exe datei auf dem Destop geöffnet haben und dann den musik butten starte funktioniert es nicht nur in Visuelbasic brauch hilfe

Kommentar von Sebastian am 19.03.2006 um 09:04

Ich würde einen Link zu deiner exe-Datei ins Programmverzeichnis setzen.
Du könntest wahrscheinlich aber auch die exe direkt vom Desktop aus aufrufen, indem du einfach das gesamte Zielverzeichnis eingibst.

Kommentar von rene am 19.03.2006 um 00:45

das ist ja alles ganz toll,aber wenn ich z.b. ein Programm auf meinen Destop starten will z.b. AOL wie heißt der Code?

ich habe denn code Call ShellExecute (AOL.exe) aber das funktioniert nicht kann mir jemand helfen

bitte bitte ganz dringen were ganz froh wenn mir jemad helfen würde

Kommentar von Eckard Ahlers am 12.07.2005 um 16:37

Wennde die Exe kennst, kannste ja die Shell-Funktion verwenden, die zu den VB-Bordmitteln gehört.
Nichtdeklarierte "File1" kann eigentlich nicht sein, wennde das Download-Projekt ausführst.

Kommentar von Sebastian am 29.06.2005 um 16:07

wo und wie kann ich die EXE-Datei angeben, die ich öffnen will?
Bei mir kommt die Fehlermeldung, dass File1 nicht deklariert sei.
Danke im Voraus

Viele Grüße
Sebastian

Kommentar von Matthias am 12.07.2003 um 22:26

Kann man mit ShellExecute auch anwendungen beenden? Theoretisch müsste das doch über den lpOperation parameter machbar sein, nur was muss ich da einfügen? close tuts nicht. Oder mach ich was anderes falshc?

Kommentar von Jürgen am 23.05.2003 um 09:32

wie kann ich eine pdf datei aufrufen?

Kommentar von gelbmann stephan am 18.11.2002 um 08:03

hat mir genau geholfen. manchmal hängt man lange an einem problem und so ein kleines beispiel hilft dann.

Kommentar von ASTU am 11.11.2002 um 15:51

hmm, Nett dieses Tool, ich habe aber Probleme von mir vordefinierte .Exe über einen einfachen Button zu starten. Also ohne vorherige auswahl durch die Programmlisten. Hat einer ne Idee?
Danke im Vorraus...

Kommentar von Dirk am 20.09.2002 um 08:50

Wie kann man den Code abändern, damit nicht nur .EXE - Dateien zu Auswahl angezeigt werden. Ich würde gerne Postscriptdateien anzeigen, die gestartet/geöffnet werden können. Die Ausführung der Postscriptdateien erfolgt über eine Dos Batch.

Kommentar von Michael Muth am 22.03.2002 um 12:06

@Holger Ohmacht
Schau Dir mal Deine Programmverknüpfungen in der Registry an. Damit Programme mit Leerzeichen problemfrei geöffnet werden muss die Dateiübergabe %1 auch in "" gekapselt sein.

Kommentar von Elisabeth Hähner am 01.09.2001 um 18:47

Habe diesen Code irgendwo gefunden. Damit kann man auch Excel-Dateien, in deren Name ein Blank ist, öffnen:
Private Declare Function ShellExecuteA Lib "shell32.dll" ( _
ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long _
) As Long
Function ShellExec( _
ByVal Path As String, _
Optional ByVal WindowStyle As VbAppWinStyle = vbNormalFocus, _
Optional ByVal Operation As String = "open" _
) As Boolean
'Die Funktion ShellExec ist eine einfache Kapsel um den API-Aufruf
ShellExec = ( _
ShellExecuteA(0&, Operation, Path, _
vbNullString, vbNullString, WindowStyle) 32)
End Function

Kommentar von Holger Ohmacht am 24.08.2001 um 09:51

Funktioniert anscheinend nicht immer. Wollte eine EXCEL-Datei, in deren Namen ein Blank ist (Z.B. "hope test.xls") , öffnen, so dass EXCEL mit dieser Datei aufgerufen wird, jedoch meint ShellExecute, dass es sich um zwei Dateien handelt ("hope" und "test.xls"). Auch wenn der Namen mittels CHR(34) in Hochkommas gesetzt wurde. (???)
Weiss jemand dazu eine Lösung? - Thanx in advance :}