Click to Rate and Give Feedback
MSDN
MSDN Library
User Interface
Windows Shell
Shell Reference
Shell Structures
 SHELLEXECUTEINFO Structure
SHELLEXECUTEINFO Structure

Contains information used by ShellExecuteEx.

Syntax

typedef struct _SHELLEXECUTEINFO {
    DWORD cbSize;
    ULONG fMask;
    HWND hwnd;
    LPCTSTR lpVerb;
    LPCTSTR lpFile;
    LPCTSTR lpParameters;
    LPCTSTR lpDirectory;
    int nShow;
    HINSTANCE hInstApp;
    LPVOID lpIDList;
    LPCTSTR lpClass;
    HKEY hkeyClass;
    DWORD dwHotKey;
    union {
        HANDLE hIcon;
        HANDLE hMonitor;
    } DUMMYUNIONNAME;
    HANDLE hProcess;
} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;

Members

cbSize
Required. The size of the structure, in bytes.
fMask
An array of flags that indicate the content and validity of the other structure members. This can be a combination of the following values.
SEE_MASK_DEFAULT
Default. 0x00000000.
SEE_MASK_CLASSNAME
0x00000001. Use the class name given by the lpClass member. If both SEE_MASK_CLASSKEY and SEE_MASK_CLASSNAME are set, the class key is used.
SEE_MASK_CLASSKEY
0x00000003. Use the class key given by the hkeyClass member. If both SEE_MASK_CLASSKEY and SEE_MASK_CLASSNAME are set, the class key is used.
SEE_MASK_IDLIST
0x00000004. Use the item identifier list given by the lpIDList member. The lpIDList member must point to an ITEMIDLIST structure.
SEE_MASK_INVOKEIDLIST

0x0000000C. Use the IContextMenu interface of the selected item's shortcut menu handler. Use either lpFile to identify the item by its file system path or lpIDList to identify the item by its pointer to an item identifier list (PIDL). This flag allows applications to use ShellExecuteEx to invoke verbs from shortcut menu extensions instead of the static verbs listed in the registry.

Note  SEE_MASK_INVOKEIDLIST overrides and implies SEE_MASK_IDLIST.
SEE_MASK_ICON
0x00000010. Use the icon given by the hIcon member. This flag cannot be combined with SEE_MASK_HMONITOR.
Note  This flag is used only in Windows XP and earlier. It is ignored in Windows Vista and later versions of Microsoft Windows.
SEE_MASK_HOTKEY
0x00000020. Use the keyboard shortcut given by the dwHotKey member.
SEE_MASK_NOCLOSEPROCESS
0x00000040. Use to indicate that the hProcess member receives the process handle. This handle is typically used to allow an application to find out when a process created with ShellExecuteEx terminates. In some cases, such as when execution is satisfied through a Dynamic Data Exchange (DDE) conversation, no handle will be returned. The calling application is responsible for closing the handle when it is no longer needed.
SEE_MASK_CONNECTNETDRV
0x00000080. Validate the share and connect to a drive letter. This enables reconnection of disconnected network drives. The lpFile member is a Universal Naming Convention (UNC) path of a file on a network.
SEE_MASK_NOASYNC

0x00000100. Wait for the execute operation to complete before returning. This flag should be used by callers that are using ShellExecute forms that might result in an async activation, for example DDE, and create a process that might be run on a background thread. (Note: ShellExecuteEx runs on a background thread by default if the caller's threading model is not Apartment.) Calls to ShellExecuteEx from processes already running on background threads should always pass this flag. Also, applications that exit immediately after calling ShellExecuteEx should specify this flag.

If the execute operation is performed on a background thread and the caller did not specify the SEE_MASK_ASYNCOK flag, then the calling thread waits until the new process has started before returning. This typically means that either CreateProcess has been called, the DDE communication has completed, or that the custom execution delegate has notified ShellExecuteEx that it is done. If the SEE_MASK_WAITFORINPUTIDLE flag is specified, then ShellExecuteEx calls WaitForInputIdle and waits for the new process to idle before returning, with a maximum timeout of 1 minute.

For further discussion on when this flag is necessary, see the Remarks section.

SEE_MASK_FLAG_DDEWAIT
0x00000100. Do not use; use SEE_MASK_NOASYNC instead.
SEE_MASK_DOENVSUBST
0x00000200. Expand any environment variables specified in the string given by the lpDirectory or lpFile member.
SEE_MASK_FLAG_NO_UI
0x00000400. Do not display an error message box if an error occurs.
SEE_MASK_UNICODE
0x00004000. Use this flag to indicate a Unicode application.
SEE_MASK_NO_CONSOLE
0x00008000. Use to create a console for the new process instead of having it inherit the parent's console. It is equivalent to using a CREATE_NEW_CONSOLE flag with CreateProcess.
SEE_MASK_ASYNCOK
0x00100000. Microsoft Windows NT 4.0 Service Pack 6 (SP6), Windows 2000 Service Pack 3 (SP3) and later. The execution can be performed on a background thread and the call should return immediately without waiting for the background thread to finish. Note that in certain cases ShellExecuteEx ignores this flag and waits for the process to finish before returning.
SEE_MASK_NOQUERYCLASSSTORE
0x01000000. Windows Internet Explorer 5.0 and later. Not used.
SEE_MASK_HMONITOR
0x00200000. Use this flag when specifying a monitor on multi-monitor systems. The monitor is specified in the hMonitor member. This flag cannot be combined with SEE_MASK_ICON.
SEE_MASK_NOZONECHECKS
0x00800000. Windows XP Service Pack 1 (SP1) and later. Do not perform a zone check. This flag allows ShellExecuteEx to bypass zone checking put into place by IAttachmentExecute.
SEE_MASK_WAITFORINPUTIDLE
0x02000000. Internet Explorer 5.0 and later. After the new process is created, wait for the process to become idle before returning, with a one minute timeout. See WaitForInputIdle for more details.
SEE_MASK_FLAG_LOG_USAGE
0x04000000. Windows XP and later. Keep track of the number of times this application has been launched. Applications with sufficiently high counts appear in the Start Menu's list of most frequently used programs.
hwnd
Optional. A window handle to any message boxes that the system might produce while executing this function. This value can be NULL.
lpVerb
A string, referred to as a verb, that specifies the action to be performed. The set of available verbs depends on the particular file or folder. Generally, the actions available from an object's shortcut menu are available verbs. If you set this parameter to NULL:
  • For systems prior to Windows 2000, the default verb is used if it is valid and available in the registry. If not, the "open" verb is used.
  • For Windows 2000 and later systems, the default verb is used if available. If not, the "open" verb is used. If neither verb is available, the system uses the first verb listed in the registry.
The following verbs are commonly used.
edit
Launches an editor and opens the document for editing. If lpFile is not a document file, the function will fail.
explore
Explores the folder specified by lpFile.
find
Initiates a search starting from the specified directory.
open
Opens the file specified by the lpFile parameter. The file can be an executable file, a document file, or a folder.
print
Prints the document file specified by lpFile. If lpFile is not a document file, the function will fail.
properties
Displays the file or folder's properties.
lpFile

The address of a null-terminated string that specifies the name of the file or object on which ShellExecuteEx will perform the action specified by the lpVerb parameter. The system registry verbs that are supported by the ShellExecuteEx function include "open" for executable files and document files and "print" for document files for which a print handler has been registered. Other applications might have added Shell verbs through the system registry, such as "play" for .avi and .wav files. To specify a Shell namespace object, pass the fully qualified parse name and set the SEE_MASK_INVOKEIDLIST flag in the fMask parameter.

Note If the SEE_MASK_INVOKEIDLIST flag is set, you can use either lpFile or lpIDList to identify the item by its file system path or its PIDL respectively. One of the two values—lpFile or lpIDList—must be set.

Note If the path is not included with the name, the current directory is assumed.

lpParameters
Optional. The address of a null-terminated string that contains the application parameters. The parameters must be separated by spaces. If the lpFile member specifies a document file, lpParameters should be NULL.
lpDirectory
Optional. The address of a null-terminated string that specifies the name of the working directory. If this member is NULL, the current directory is used as the working directory.
nShow
Required. Flags that specify how an application is to be shown when it is opened; one of the SW_ values listed for the ShellExecute function. If lpFile specifies a document file, the flag is simply passed to the associated application. It is up to the application to decide how to handle it.
hInstApp
[out] If SEE_MASK_NOCLOSEPROCESS is set and the ShellExecuteEx call succeeds, it sets this member to a value greater than 32. If the function fails, it is set to an SE_ERR_XXX error value that indicates the cause of the failure. Although hInstApp is declared as an HINSTANCE for compatibility with 16-bit Windows applications, it is not a true HINSTANCE. It can be cast only to an int and compared to either 32 or the following SE_ERR_XXX error codes.
SE_ERR_FNF
File not found.
SE_ERR_PNF
Path not found.
SE_ERR_ACCESSDENIED
Access denied.
SE_ERR_OOM
Out of memory.
SE_ERR_DLLNOTFOUND
Dynamic-link library not found.
SE_ERR_SHARE
Cannot share an open file.
SE_ERR_ASSOCINCOMPLETE
File association information not complete.
SE_ERR_DDETIMEOUT
DDE operation timed out.
SE_ERR_DDEFAIL
DDE operation failed.
SE_ERR_DDEBUSY
DDE operation is busy.
SE_ERR_NOASSOC
File association not available.
lpIDList
The address of an absolute ITEMIDLIST structure (PCIDLIST_ABSOLUTE) to contain an item identifier list that uniquely identifies the file to execute. This member is ignored if the fMask member does not include SEE_MASK_IDLIST or SEE_MASK_INVOKEIDLIST.
lpClass
The address of a null-terminated string that specifies the name of a file type or a GUID. This member is ignored if fMask does not include SEE_MASK_CLASSNAME.
hkeyClass
A handle to the registry key for the file type. The access rights for this registry key should be set to KEY_READ. This member is ignored if fMask does not include SEE_MASK_CLASSKEY.
dwHotKey
A keyboard shortcut to associate with the application. The low-order word is the virtual key code, and the high-order word is a modifier flag (HOTKEYF_). For a list of modifier flags, see the description of the WM_SETHOTKEY message. This member is ignored if fMask does not include SEE_MASK_HOTKEY.
DUMMYUNIONNAME
hIcon
A handle to the icon for the file type. This member is ignored if fMask does not include SEE_MASK_ICON. This value is used only in Windows XP and earlier. It is ignored in Windows Vista and later versions.
hMonitor
A handle to the monitor upon which the document is to be displayed. This member is ignored if fMask does not include SEE_MASK_HMONITOR.
hProcess

A handle to the newly started application. This member is set on return and is always NULL unless fMask is set to SEE_MASK_NOCLOSEPROCESS. Even if fMask is set to SEE_MASK_NOCLOSEPROCESS, hProcess will be NULL if no process was launched. For example, if a document to be launched is a URL and an instance of Internet Explorer is already running, it will display the document. No new process is launched, and hProcess will be NULL.

Note ShellExecuteEx does not always return an hProcess, even if a process is launched as the result of the call. For example, an hProcess does not return when you use SEE_MASK_INVOKEIDLIST to invoke IContextMenu.

Remarks

The SEE_MASK_NOASYNC flag must be specified if the thread calling ShellExecuteEx does not have a message loop or if the thread or process will terminate soon after ShellExecuteEx returns. Under such conditions, the calling thread will not be available to complete the DDE conversation, so it is important that ShellExecuteEx complete the conversation before returning control to the calling application. Failure to complete the conversation can result in an unsuccessful launch of the document.

If the calling thread has a message loop and will exist for some time after the call to ShellExecuteEx returns, the SEE_MASK_NOASYNC flag is optional. If the flag is omitted, the calling thread's message pump will be used to complete the DDE conversation. The calling application regains control sooner, since the DDE conversation can be completed in the background.

When populating the most frequently used program list using the SEE_MASK_FLAG_LOG_USAGE flag in fMask, counts are made differently for the classic and Windows XP-style Start menus. The classic style menu only counts hits to the shortcuts in the Program menu. The Windows XP-style menu counts both hits to the shortcuts in the Program menu and hits to those shortcuts' targets outside of the Program menu. Therefore, setting lpFile to myfile.exe would affect the count for the Windows XP-style menu regardless of whether that file was launched directly or through a shortcut. The classic style—which would require lpFile to contain a .lnk file name—would not be affected.

To include double quotation marks in lpParameters, enclose each mark in a pair of quotation marks, as in the following example.

sei.lpParameters = "An example: \"\"\"quoted text\"\"\"";
In this case, the application receives three parameters: An, example:, and "quoted text".

Structure Information

Headershellapi.h
Minimum operating systems Windows NT 3.51, Windows 95
Tags What's this?: Add a tag
Community Content   What is Community Content?
Add new content RSS  Annotations
Elevating the process through ShellExecuteEx      jlapoint ... Stanley Roark   |   Edit   |   Show History

For windows Vista, there is also a new verb that can be specified for lpVerb:

runas 


Lauch the process as Administrator causing UAC elevation if required. This is the same as the explorer command "Run as administrator"


Ref:http://msdn2.microsoft.com/en-us/library/bb756922.aspx

Tags What's this?: runas (x) Add a tag
Flag as ContentBug
Depracated and osk.exe      ChristianWimmer   |   Edit   |   Show History
1.
The article should be updated:
SEE_MASK_NOASYNC
..., see the Remarks section.
Instead the remarks section uses SEE_MASK_FLAG_DDEWAIT. Since it is deprecated and should not be used anymore, this article should be updated.

2.
If you wish to run osk.exe (the on screen keyboard) you need to set the SEE_MASK_NOASYNC mask. CreateProcess cannot be used at least in Windows Vista.
lpParameters and spaces      ElKry ... cimasw   |   Edit   |   Show History
lpParameters separates the parameters with spaces, so when one of your parameters has spaces it becomes a problem. The solution is to enclose all spaces that you don't want to use as parameter separator with double quotes.

For example, if you want to send the parameters

Parameter 1

Parameter 2

the correct syntax would be

Parameter" "1 Parameter" "2

or, for a TCHAR* string, "Parameter\" \"1 Parameter\" \"2"

Notice this is very different from the usual approach of enclosing the parameters themselves with double quotes.


SEE_MASK_NOASYNC requires SDK version 6      nobugz   |   Edit   |   Show History
The recommended SEE_MASK_NOASYNC flag is only #defined in SDK version 6.0 and up. Use FLAG_DDEWAIT for earlier versions, like the one that came with VS2005. It will still work in newer releases.
Visual Basic 9 Declaration      Đonny   |   Edit   |   Show History
        <StructLayout(LayoutKind.Sequential)> _
Public Structure SHELLEXECUTEINFO
Dim cbSize As Integer
Dim fMask As ShellExecuteInfoFlags
Dim hwnd As Integer
<MarshalAs(UnmanagedType.LPTStr)> _
Dim lpVerb As String
<MarshalAs(UnmanagedType.LPTStr)> _
Dim lpFile As String
<MarshalAs(UnmanagedType.LPTStr)> _
Dim lpParameters As String
<MarshalAs(UnmanagedType.LPTStr)> _
Dim lpDirectory As String
Dim nShow As Integer
Dim hInstApp As ShellExecuteErrors
Dim lpIDList As Integer
<MarshalAs(UnmanagedType.LPTStr)> _
Dim lpClass As String
Dim hkeyClass As Integer
Dim dwHotKey As Integer
Dim hIcon As Integer
Public Property hMonitor() As Integer
Get
Return hIcon
End Get
Set(ByVal value As Integer)
hIcon = value
End Set
End Property
Dim hProcess As Integer
End Structure
Public Enum ShellExecuteErrors As Integer
SE_ERR_FNF = 2
SE_ERR_PNF = 3
SE_ERR_ACCESSDENIED = 5
SE_ERR_OOM = 8
SE_ERR_DLLNOTFOUND = 32
SE_ERR_SHARE = 26
SE_ERR_ASSOCINCOMPLETE = 27
SE_ERR_DDETIMEOUT = 28
SE_ERR_DDEFAIL = 29
SE_ERR_DDEBUSY = 30
SE_ERR_NOASSOC = 31
End Enum
Public Enum ShellExecuteInfoFlags As Integer
SEE_MASK_CLASSNAME = &H1
SEE_MASK_CLASSKEY = &H3
SEE_MASK_IDLIST = &H4
SEE_MASK_INVOKEIDLIST = &HC
SEE_MASK_ICON = &H10
SEE_MASK_HOTKEY = &H20
SEE_MASK_NOCLOSEPROCESS = &H40
SEE_MASK_CONNECTNETDRV = &H80
SEE_MASK_NOASYNC = &H100
<EditorBrowsable(EditorBrowsableState.Never)> _
SEE_MASK_FLAG_DDEWAIT = &H100
SEE_MASK_DOENVSUBST = &H200
SEE_MASK_FLAG_NO_UI = &H400
SEE_MASK_UNICODE = &H4000
SEE_MASK_NO_CONSOLE = &H8000
SEE_MASK_ASYNCOK = &H100000
SEE_MASK_NOQUERYCLASSSTORE = &H1000000
SEE_MASK_HMONITOR = &H200000
SEE_MASK_NOZONECHECKS = &H800000
SEE_MASK_WAITFORINPUTIDLE = &H2000000
SEE_MASK_FLAG_LOG_USAGE = &H4000000
End Enum

Processing
© 2009 Microsoft Corporation. All rights reserved. Terms of Use | Trademarks | Privacy Statement | Site Feedback
Page view tracker