How To Use ShellExecute to Launch Associated File (32-bit)

This article was previously published under Q170918
This article has been archived. It is offered "as is" and will no longer be updated.
SUMMARY
You can use the Windows API ShellExecute() function to start theapplication associated with a given document extension without knowing thename of the associated application. For example, you could start thePaintbrush program by passing the filename ARCADE.BMP to the ShellExecute()function.
MORE INFORMATION
The ShellExecute function opens or prints the specified file. Following isthe declaration to use when calling this function from Visual Basic:
   Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _                   (ByVal hwnd As Long, ByVal lpszOp As String, _                    ByVal lpszFile As String, ByVal lpszParams As String, _                    ByVal LpszDir As String, ByVal FsShowCmd As Long) _                    As Long				

The following table provides descriptions for each parameter:
Parameter     Description----------------------------------------------------------------------------hwnd          Identifies the parent window. This window receives any              message boxes an application produces (for example, for error              reporting).lpszOp        Points to a null-terminated string specifying the operation              to perform. This string can be "open" or "print." If this              parameter is NULL, "open" is the default value.lpszFile      Points to a null-terminated string specifying the file              to open.lpszParams    Points to a null-terminated string specifying parameters              passed to the application when the lpszFile parameter              specifies an executable file. If lpszFile points to a string              specifying a document file, this parameter is NULL.LpszDir       Points to a null-terminated string specifying the default              directory.FsShowCmd     Specifies whether the application window is to be shown when              the application is opened.				

Step-by-Step Example

The following example demonstrates how to start an application or load adocument into its associated application. The Windows API ShellExecute()function is different from the Visual Basic Shell() function in that youcan pass the ShellExecute() function the name of a document and it willlaunch the associated application, and then pass the filename to theapplication.
  1. Start a New project in Visual Basic. Form1 is created by default.
  2. Add the following code to the General Declarations section of Form1:
          Option Explicit      Private Declare Function ShellExecute Lib "shell32.dll" Alias _      "ShellExecuteA" (ByVal hwnd As Long, ByVal lpszOp As _      String, ByVal lpszFile As String, ByVal lpszParams As String, _      ByVal lpszDir As String, ByVal FsShowCmd As Long) As Long      Private Declare Function GetDesktopWindow Lib "user32" () As Long      Const SW_SHOWNORMAL = 1      Const SE_ERR_FNF = 2&      Const SE_ERR_PNF = 3&      Const SE_ERR_ACCESSDENIED = 5&      Const SE_ERR_OOM = 8&      Const SE_ERR_DLLNOTFOUND = 32&      Const SE_ERR_SHARE = 26&      Const SE_ERR_ASSOCINCOMPLETE = 27&      Const SE_ERR_DDETIMEOUT = 28&      Const SE_ERR_DDEFAIL = 29&      Const SE_ERR_DDEBUSY = 30&      Const SE_ERR_NOASSOC = 31&      Const ERROR_BAD_FORMAT = 11&      Function StartDoc(DocName As String) As Long          Dim Scr_hDC As Long          Scr_hDC = GetDesktopWindow()          StartDoc = ShellExecute(Scr_hDC, "Open", DocName, _          "", "C:\", SW_SHOWNORMAL)      End Function      Private Sub Form_Click()          Dim r As Long, msg As String          r = StartDoc("C:\WINDOWS\ARCADE.BMP")          If r <= 32 Then              'There was an error              Select Case r                  Case SE_ERR_FNF                      msg = "File not found"                  Case SE_ERR_PNF                      msg = "Path not found"                  Case SE_ERR_ACCESSDENIED                      msg = "Access denied"                  Case SE_ERR_OOM                      msg = "Out of memory"                  Case SE_ERR_DLLNOTFOUND                      msg = "DLL not found"                  Case SE_ERR_SHARE                      msg = "A sharing violation occurred"                  Case SE_ERR_ASSOCINCOMPLETE                      msg = "Incomplete or invalid file association"                  Case SE_ERR_DDETIMEOUT                      msg = "DDE Time out"                  Case SE_ERR_DDEFAIL                      msg = "DDE transaction failed"                  Case SE_ERR_DDEBUSY                      msg = "DDE busy"                  Case SE_ERR_NOASSOC                      msg = "No association for file extension"                  Case ERROR_BAD_FORMAT                      msg = "Invalid EXE file or error in EXE image"                  Case Else                      msg = "Unknown error"              End Select              MsgBox msg          End If      End Sub						
  3. Run the project and click the form.

General Information About the Process

If the function succeeds, the return value is the instance handle of theapplication that was run. If there was an error, the return value is lessthan or equal to 32.

The file specified by the lpszFile parameter can be a document file or anexecutable file. If it is a document file, this function opens or prints itdepending on the value of the lpszOp parameter. If it is an executablefile, this function opens it even if the lpszOp specifies "PRINT."
REFERENCES
"Programmer's Reference, Volume 2: Functions" of the Microsoft WindowsSoftware Development Kit (SDK), pages 901-904
kbVBp500 kbVBp600 kbVBp kbdsd kbDSupport kbVBp400 KBWIN32SDK KBAPI
Properties

Article ID: 170918 - Last Review: 12/04/2015 17:19:35 - Revision: 3.2

Microsoft Visual Basic 6.0 Learning Edition, Microsoft Visual Basic 6.0 Professional Edition, Microsoft Visual Basic 6.0 Enterprise Edition, Microsoft Visual Basic 5.0 Control Creation Edition, Microsoft Visual Basic 5.0 Learning Edition, Microsoft Visual Basic 5.0 Professional Edition, Microsoft Visual Basic 5.0 Enterprise Edition, Microsoft Visual Basic 4.0 Standard Edition, Microsoft Visual Basic 4.0 Professional Edition, Microsoft Visual Basic 4.0 32-Bit Enterprise Edition

  • kbnosurvey kbarchive kbhowto KB170918
Feedback