Library tutorials & articles

Shell and ShellExecute function

Opening a file

You can run another application or open a file by using the ShellExecute statement. This is basically the same as entering text into the Run window. First, declare this:

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

Some programs register its name, so that you only have to enter its application name (these also work in the Run window). Some of these are:

Application Name Text Used
Notepad

Notepad

WordPad

Wordpad

Word

Winword

Excel

Excel

Access

MSAccess

Publisher

MSPub

Paint

MSPaint

Explorer

Explorer

Internet Explorer

Iexplore

MSDos Editor edit

So, 

ShellExecute 0&, vbNullString, "WinWord", vbNullString, vbNullString, vbNormalFocus

Runs Word, and

ShellExecute 0&, vbNullString, "C:\test.doc", vbNullString, vbNullString, vbNormalFocus

opens C:\test.doc with its default viewer. Note that if the path you pass contains spaces, you need to surround it by quotes:

ShellExecute 0&, vbNullString, """C:\dir with spaces\test.doc""", vbNullString, vbNullString, vbNormalFocus

which is actually the equivalent of passing this:

" C:\dir with spaces\test.doc "

The fourth parameter specifies any command line parameters you want to pass. For example, if you wanted to run notepad, and get it to open c:\test.doc, then you would do this:

ShellExecute 0&, vbNullString, "notepad", "c:\test.doc", vbNullString, vbNormalFocus

The fifth parameter specifies the startup directory (ie the directory that that will be shown when you click open). This is the same as the StartIn parameter in a Shortcut.

The sixth parameter specifies the startup position, and can be one of the following:

 

Constant Value Description
vbHide 0 Window is hidden and focus is passed to the hidden window.
vbNormalFocus 1 Window has focus and is restored to its original size and position.
vbMinimizedFocus 2 Window is displayed as an icon with focus.
vbMaximizedFocus 3 Window is maximized with focus.
vbNormalNoFocus 4 Window is restored to its most recent size and position. The currently active window remains active.
vbMinimizedNoFocus 6 Window is displayed as an icon. The currently active window remains active.

The ShellExecute function will return 2 if the file is not found.

You can also use this statement for sending an email:

ShellExecute 0&, vbNullString, "mailto:support@vbweb.co.uk", vbNullString, vbNullString, vbNormalFocus

or to open a URL:

ShellExecute 0&, vbNullString, "http://www.vbweb.co.uk", vbNullString, vbNullString, vbNormalFocus

Comments

  1. 29 Jun 2009 at 22:55

    hi!! i make a program with .net, in this program use the command shell for execute an aplication in visual basic 6 but i can not open de file "exe" why i need pass by parameters for opening the file.

    Somebody can help me with my doubt.

  2. 14 Jul 2006 at 05:52
    aaftab wrote:
    This Method Works Well But My Problem is That I want to Open The Explorer File(s) (.html or htm) In New Window(new instance of IE for every file) every time I clicked on the Different file.
  3. 05 Sep 2005 at 11:05
    This Method Works Well But My Problem is That I want to Open The

    Explorer File(s) (.html or htm)  In New Window(new instance of IE for

    every file) every time I clicked on the Different file.
  4. 13 Jun 2005 at 03:53
  5. 13 Jun 2005 at 02:34

    I have the same situation and would appreciate your sharing any answer.

  6. 04 Jun 2005 at 23:02

    Is there anyway of using information gathered from drive/dir/file list boxes in the path when using Shell? I have tried but I think I have the wrong syntax even though VB6 does not complain.

  7. 10 May 2005 at 16:31
    Hey, I have a memory leak problem. My application has to run different programs. For example, when the user has to run Notepad, he just clicks on the button on my program and my program runs Notepad... Simple and straightforward. The problem is that the user might have to run Notedpad several times throughout the day, and when you look at the memory usage for my program on Task Manager, the size increases every time the user decides to run Notepad (even though he closes it after he's through using it). My question is: how would I release the memory used by my program for Notepad when the user closes Notepad? I need this so that I could keep the same memory usage, cause if the user decides to run Notepad 100 times, and then close all of those, that's a whole lotta memory used up for nothing...

    I would really appreciate any help,
    Thank you
  8. 18 Jan 2005 at 13:56

    Hi,
    very compliments for your tuttorial, it's very clarity.
    I have another question, now.
    The command "sendkeys" send data to the active application
    in this moment.
    I need to send data (key) to an aplication that is just
    running, but in background, in minimize state.


    It's possible to make this?
    Thanks in advantage.


    DaxDax

  9. 24 Nov 2004 at 06:52

    I want my program to wait till Shell or shellexecute command finishes zipping a file of size say 500mb. Please let me know the solution.
    Thanks,

  10. 17 Feb 2004 at 21:41

    is there a possibility for me to open a program to another pc. im thinking like a server client program where the server opens the client or other program from the other terminal...??

  11. 11 May 2003 at 19:01

    Nice tutorial, but you seem to have overlooked something. How do I launch My Computer? Explorer with no parameter opens My Documents, Explorer mycomp~1 and Explorer ""My Computer"" both say the directory doesn't exist. (This is on XP Pro BTW.)

  12. 01 Jan 1999 at 00:00

    This thread is for discussions of Shell and ShellExecute function.

Leave a comment

Sign in or Join us (it's free).

James Crowley James first started this website when learning Visual Basic back in 1999 whilst studying his GCSEs. The site grew steadily over the years while being run as a hobby - to a regular monthly audience ...

Related discussion

Related podcasts

  • Christian Beauclair

    14 mai 2008 (�mission #0074) ::.Christian Beauclair: Stratégies de migration VB6 vers .NET Nous discutons avec Christian Beauclair des stratégies de migration VB6 vers .NET. Entre autres, nous discutons comment utiliser le "VB 6 Code Advisor" et le "Interop Forms Toolkit" pour ajouter la puiss...

We'd love to hear what you think! Submit ideas or give us feedback