All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sun.jna.platform.win32.ShellAPI Maven / Gradle / Ivy

There is a newer version: 5.15.0
Show newest version
/* Copyright (c) 2010 Daniel Doubrovkine, All Rights Reserved
 *
 * The contents of this file is dual-licensed under 2
 * alternative Open Source/Free licenses: LGPL 2.1 or later and
 * Apache License 2.0. (starting with JNA version 4.0.0).
 *
 * You can freely decide which license you want to apply to
 * the project.
 *
 * You may obtain a copy of the LGPL License at:
 *
 * http://www.gnu.org/licenses/licenses.html
 *
 * A copy is also included in the downloadable source code package
 * containing JNA, in file "LGPL2.1".
 *
 * You may obtain a copy of the Apache License at:
 *
 * http://www.apache.org/licenses/
 *
 * A copy is also included in the downloadable source code package
 * containing JNA, in file "AL2.0".
 */
package com.sun.jna.platform.win32;

import com.sun.jna.Platform;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.Structure.FieldOrder;
import com.sun.jna.TypeMapper;
import com.sun.jna.platform.win32.WinDef.DWORD;
import com.sun.jna.platform.win32.WinDef.HINSTANCE;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.platform.win32.WinDef.LPARAM;
import com.sun.jna.platform.win32.WinDef.RECT;
import com.sun.jna.platform.win32.WinDef.UINT;
import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.platform.win32.WinReg.HKEY;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APITypeMapper;

/**
 * Ported from ShellAPI.h.
 * Microsoft Windows SDK 6.0A.
 * @author dblock[at]dblock.org
 */
public interface ShellAPI extends StdCallLibrary {

    int STRUCTURE_ALIGNMENT = Platform.is64Bit() ? Structure.ALIGN_DEFAULT : Structure.ALIGN_NONE;
    TypeMapper TYPE_MAPPER = Boolean.getBoolean("w32.ascii") ? W32APITypeMapper.ASCII : W32APITypeMapper.UNICODE;

    int FO_MOVE = 0x0001;
    int FO_COPY = 0x0002;
    int FO_DELETE = 0x0003;
    int FO_RENAME = 0x0004;

    int FOF_MULTIDESTFILES = 0x0001;
    int FOF_CONFIRMMOUSE = 0x0002;
    int FOF_SILENT = 0x0004; // don't display progress UI (confirm prompts may be displayed still)
    int FOF_RENAMEONCOLLISION = 0x0008; // automatically rename the source files to avoid the collisions
    int FOF_NOCONFIRMATION = 0x0010; // don't display confirmation UI, assume "yes" for cases that can be bypassed, "no" for those that can not
    int FOF_WANTMAPPINGHANDLE = 0x0020; // Fill in SHFILEOPSTRUCT.hNameMappings
    int FOF_ALLOWUNDO = 0x0040; // enable undo including Recycle behavior for IFileOperation::Delete()
    int FOF_FILESONLY = 0x0080; // only operate on the files (non folders), both files and folders are assumed without this
    int FOF_SIMPLEPROGRESS = 0x0100; // means don't show names of files
    int FOF_NOCONFIRMMKDIR = 0x0200; // don't dispplay confirmatino UI before making any needed directories, assume "Yes" in these cases
    int FOF_NOERRORUI = 0x0400; // don't put up error UI, other UI may be displayed, progress, confirmations
    int FOF_NOCOPYSECURITYATTRIBS = 0x0800; // dont copy file security attributes (ACLs)
    int FOF_NORECURSION = 0x1000; // don't recurse into directories for operations that would recurse
    int FOF_NO_CONNECTED_ELEMENTS = 0x2000; // don't operate on connected elements ("xxx_files" folders that go with .htm files)
    int FOF_WANTNUKEWARNING = 0x4000; // during delete operation, warn if nuking instead of recycling (partially overrides FOF_NOCONFIRMATION)
    int FOF_NORECURSEREPARSE = 0x8000; // deprecated; the operations engine always does the right thing on FolderLink objects (symlinks, reparse points, folder shortcuts)
    int FOF_NO_UI = (FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR); // don't display any UI at all

    int PO_DELETE = 0x0013; // printer is being deleted
    int PO_RENAME = 0x0014; // printer is being renamed
    int PO_PORTCHANGE = 0x0020; // port this printer connected to is being changed
    int PO_REN_PORT = 0x0034; // PO_RENAME and PO_PORTCHANGE at same time.

    /**
     * Contains information that the SHFileOperation function uses to perform file operations.
     */
    @FieldOrder({"hwnd", "wFunc", "pFrom", "pTo", "fFlags", "fAnyOperationsAborted", "pNameMappings", "lpszProgressTitle"})
    public static class SHFILEOPSTRUCT extends Structure {
        /**
         * A window handle to the dialog box to display information about
         * the status of the file operation.
         */
        public HANDLE hwnd;
        /**
         * An FO_* value that indicates which operation to perform.
         */
        public int wFunc;
        /**
         * A pointer to one or more source file names, double null-terminated.
         */
        public String pFrom;
        /**
         * A pointer to the destination file or directory name.
         */
        public String pTo;
        /**
         * Flags that control the file operation.
         */
        public short fFlags;
        /**
         * When the function returns, this member contains TRUE if any file operations
         * were aborted before they were completed; otherwise, FALSE. An operation can
         * be manually aborted by the user through UI or it can be silently aborted by
         * the system if the FOF_NOERRORUI or FOF_NOCONFIRMATION flags were set.
         */
        public boolean fAnyOperationsAborted;
        /**
         * When the function returns, this member contains a handle to a name mapping
         * object that contains the old and new names of the renamed files. This member
         * is used only if the fFlags member includes the FOF_WANTMAPPINGHANDLE flag.
         */
        public Pointer pNameMappings;
        /**
         * A pointer to the title of a progress dialog box. This is a null-terminated string.
         */
        public String lpszProgressTitle;

        /** Use this to encode pFrom/pTo paths.
         * @param paths Paths to encode
         * @return Encoded paths
         */
        public String encodePaths(String[] paths) {
            String encoded = "";
            for (int i=0; i < paths.length;i++) {
                encoded += paths[i];
                encoded += "\0";
            }
            return encoded + "\0";
        }
    }

    /**
     * Appbar message value to send. This parameter can be one of the following
     * values.
     */
    int ABM_NEW = 0x00000000;
    /**
     * Registers a new appbar and specifies the message identifier that the
     * system should use to send notification messages to the appbar.
     */
    int ABM_REMOVE = 0x00000001;
    /** Unregisters an appbar, removing the bar from the system's internal list.*/
    int ABM_QUERYPOS = 0x00000002;
    /** Requests a size and screen position for an appbar. */
    int ABM_SETPOS = 0x00000003;
    /** Sets the size and screen position of an appbar. */
    int ABM_GETSTATE = 0x00000004;
    /** Retrieves the autohide and always-on-top states of the Windows taskbar. */
    int ABM_GETTASKBARPOS = 0x00000005;
    /**
     * Retrieves the bounding rectangle of the Windows taskbar. Note that this
     * applies only to the system taskbar. Other objects, particularly toolbars
     * supplied with third-party software, also can be present. As a result,
     * some of the screen area not covered by the Windows taskbar might not be
     * visible to the user. To retrieve the area of the screen not covered by
     * both the taskbar and other app bars -- the working area available to your
     * application --, use the GetMonitorInfo function.
     */
    int ABM_ACTIVATE = 0x00000006;
    /**
     * Notifies the system to activate or deactivate an appbar. The lParam
     * member of the APPBARDATA pointed to by pData is set to TRUE to activate
     * or FALSE to deactivate.
     */
    int ABM_GETAUTOHIDEBAR = 0x00000007;
    /**
     *  Retrieves the handle to the autohide appbar associated with a particular
     * edge of the screen.
     */
    int ABM_SETAUTOHIDEBAR = 0x00000008;
    /** Registers or unregisters an autohide appbar for an edge of the screen. */
    int ABM_WINDOWPOSCHANGED = 0x00000009;
    /** Notifies the system when an appbar's position has changed. */
    int ABM_SETSTATE = 0x0000000A;

    /** Left edge. */
    int ABE_LEFT = 0;
    /** Top edge. */
    int ABE_TOP = 1;
    /** Right edge. */
    int ABE_RIGHT = 2;
    /** Bottom edge. */
    int ABE_BOTTOM = 3;

    /**
     * Contains information about a system appbar message.
     */
    @FieldOrder({"cbSize", "hWnd", "uCallbackMessage", "uEdge",  "rc", "lParam"})
    public static class APPBARDATA extends Structure {
        public static class ByReference extends APPBARDATA implements Structure.ByReference {
        }

        public DWORD cbSize;
        public HWND hWnd;
        public UINT uCallbackMessage;
        public UINT uEdge;
        public RECT rc;
        public LPARAM lParam;

        public APPBARDATA() {
            super();
        }

        public APPBARDATA(Pointer p) {
            super(p);
        }
    }

    /**
     * 

* Contains information used by * ShellExecuteEx. *

* *
     * 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;
     * 
* *

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". *

*/ @FieldOrder({"cbSize", "fMask", "hwnd", "lpVerb", "lpFile", "lpParameters", "lpDirectory", "nShow", "hInstApp", "lpIDList", "lpClass", "hKeyClass", "dwHotKey", "hMonitor", "hProcess"}) public class SHELLEXECUTEINFO extends Structure { /** *

* Type: DWORD *

*

* Required. The size of this structure, in bytes. *

*/ public int cbSize = size(); /** *

* Type: ULONG *

*

* Flags that indicate the content and validity of the other structure * members; a combination of the following values: *

*
*
*

* SEE_MASK_DEFAULT (0x00000000) *

*
*
*

* Use default values. *

*
*
*

* 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 * structure. *

*
*
*

* SEE_MASK_INVOKEIDLIST (0x0000000C) *

*
*
*

* Use the interface of the selected item's . Use either * lpFile to identify the item by its file system path * or lpIDList to identify the item by its PIDL. This * flag allows applications to use 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 as of * Windows Vista.
*
*

* 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 terminates. In * some cases, such as when execution is satisfied through a 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 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: 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 has been called, the DDE communication * has completed, or that the custom execution delegate has notified * that it is done. If the SEE_MASK_WAITFORINPUTIDLE flag is specified, * then ShellExecuteEx calls 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 inherit the parent's console for the new process instead of * having it create a new console. It is the opposite of using a * CREATE_NEW_CONSOLE flag with . *

*
*
*

* SEE_MASK_ASYNCOK (0x00100000) *

*
*
*

* 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 ignores this flag and waits for * the process to finish before returning. *

*
*
*

* SEE_MASK_NOQUERYCLASSSTORE (0x01000000) *

*
*
*

* 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) *

*
*
*

* Introduced in Windows XP. Do not perform a zone * check. This flag allows to bypass zone checking put into place by . *

*
*
*

* SEE_MASK_WAITFORINPUTIDLE (0x02000000) *

*
*
*

* After the new process is created, wait for the process to become idle * before returning, with a one minute timeout. See for more details. *

*
*
*

* SEE_MASK_FLAG_LOG_USAGE (0x04000000) *

*
*
*

* Introduced in Windows XP. 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. *

*
*
*

* SEE_MASK_FLAG_HINST_IS_SITE (0x08000000) *

*
*
*

* Introduced in Windows 8. The * hInstApp member is used to specify the of an object * that implements . This object will be used as a site pointer. The * site pointer is used to provide services to the function, the handler * binding process, and invoked verb handlers. *

*
*
*/ public int fMask; /** *

* Type: HWND *

*

* Optional. A handle to the parent window, used to display any message * boxes that the system might produce while executing this function. * This value can be NULL. *

*/ public HWND hwnd; /** *

* Type: LPCTSTR *

* *
*

* 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. This parameter can be * NULL, in which case 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. *

*
*
*/ public String lpVerb; /** *

* Type: LPCTSTR *

*

* The address of a null-terminated string that specifies the name of * the file or object on which 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.
*/ public String lpFile; /** *

* Type: LPCTSTR *

*

* 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. *

*/ public String lpParameters; /** *

* Type: LPCTSTR *

*

* 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. *

*/ public String lpDirectory; /** *

* Type: int *

*

* 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. *

*/ public int nShow; /** *

* Type: HINSTANCE *

*

* [out] If SEE_MASK_NOCLOSEPROCESS is set and the 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 (2) *

*
*
*

* File not found. *

*
*
*

* SE_ERR_PNF (3) *

*
*
*

* Path not found. *

*
*
*

* SE_ERR_ACCESSDENIED (5) *

*
*
*

* Access denied. *

*
*
*

* SE_ERR_OOM (8) *

*
*
*

* Out of memory. *

*
*
*

* SE_ERR_DLLNOTFOUND (32) *

*
*
*

* Dynamic-link library not found. *

*
*
*

* SE_ERR_SHARE (26) *

*
*
*

* Cannot share an open file. *

*
*
*

* SE_ERR_ASSOCINCOMPLETE (27) *

*
*
*

* File association information not complete. *

*
*
*

* SE_ERR_DDETIMEOUT (28) *

*
*
*

* DDE operation timed out. *

*
*
*

* SE_ERR_DDEFAIL (29) *

*
*
*

* DDE operation failed. *

*
*
*

* SE_ERR_DDEBUSY (30) *

*
*
*

* DDE operation is busy. *

*
*
*

* SE_ERR_NOASSOC (31) *

*
*
*

* File association not available. *

*
*
*/ public HINSTANCE hInstApp; /** *

* Type: LPVOID *

*

* 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. *

*/ public Pointer lpIDList; /** *

* Type: LPCTSTR *

* *

* The address of a null-terminated string that specifies one of the * following: *

*
    *
  • A ProgId. For example, "Paint.Picture".
  • *
  • A URI protocol scheme. For example, "http".
  • *
  • A file extension. For example, ".txt".
  • *
  • A registry path under HKEY_CLASSES_ROOT that names a subkey that * contains one or more Shell verbs. This key will have a subkey that * conforms to the Shell verb registry schema, such as *

    * shell\verb name *

    * .
  • *
*

* This member is ignored if fMask does not include * SEE_MASK_CLASSNAME. *

*/ public String lpClass; /** *

* Type: HKEY *

*

* 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. *

*/ public HKEY hKeyClass; /** *

* Type: DWORD *

*

* 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. *

*/ public int dwHotKey; /** * This is actually a union: * *
         * union { HANDLE hIcon; HANDLE hMonitor; } DUMMYUNIONNAME;
         * 
* * DUMMYUNIONNAME *
*
hIcon
*
*

* Type: HANDLE *

*
*
*

* 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 as of Windows Vista. *

*
*
hMonitor
*
*

* Type: HANDLE *

*
*
*

* 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. *

*
*
*/ public HANDLE hMonitor; /** *

* Type: HANDLE *

*

* 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 * .
*/ public HANDLE hProcess; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy