相关文章推荐
谦和的苦瓜  ·  MYSQL学习:GROUP ...·  1 年前    · 
深情的炒粉  ·  c# - How do I set ...·  1 年前    · 
有胆有识的楼房  ·  java - Android ...·  1 年前    · 
SEE_MASK_CLASSNAME (0x00000001) 使用 lpClass 成员提供的类名。 如果同时设置了SEE_MASK_CLASSKEY和SEE_MASK_CLASSNAME,则使用类键。 SEE_MASK_CLASSKEY (0x00000003) 使用 hkeyClass 成员提供的类键。 如果同时设置了SEE_MASK_CLASSKEY和SEE_MASK_CLASSNAME,则使用类键。 SEE_MASK_IDLIST (0x00000004) 使用 lpIDList 成员提供的项标识符列表。 lpIDList 成员必须指向 ITEMIDLIST 结构。 SEE_MASK_INVOKEIDLIST (0x0000000C) 使用所选项目的 快捷菜单处理程序 IContextMenu 接口。 使用 lpFile 通过其文件系统路径或 lpIDList 标识项,以按其 PIDL 标识项。 此标志允许应用程序使用 ShellExecuteEx 从快捷菜单扩展而不是注册表中列出的静态谓词调用谓词。
注意: SEE_MASK_INVOKEIDLIST重写并表示SEE_MASK_IDLIST。
SEE_MASK_NOCLOSEPROCESS (0x00000040) 用于指示 hProcess 成员接收进程句柄。 此句柄通常用于允许应用程序找出何时使用 ShellExecuteEx 终止创建的进程。 在某些情况下,例如通过 DDE 会话满足执行时,不会返回句柄。 调用应用程序负责在不再需要句柄时关闭句柄。 SEE_MASK_CONNECTNETDRV (0x00000080) 验证共享并连接到驱动器号。 这允许重新连接断开连接的网络驱动器。 lpFile 成员是网络上文件的 UNC 路径。 SEE_MASK_NOASYNC (0x00000100) 等待执行操作在返回之前完成。 使用 ShellExecute 表单(例如 DDE)的调用方应使用此标志,并创建可能在后台线程上运行的进程。 (注意:如果调用方线程模型不是 Apartment, 则 ShellExecuteEx 默认在后台线程上运行。) 从已在后台线程上运行的进程调用 ShellExecuteEx 应始终传递此标志。 此外,调用 ShellExecuteEx 后立即退出的应用程序应指定此标志。

如果在后台线程上执行执行操作,并且调用方未指定SEE_MASK_ASYNCOK标志,则调用线程会在返回之前等待新进程启动。 这通常意味着已调用 CreateProcess 、DDE 通信已完成,或者自定义执行委托已通知 ShellExecuteEx 已完成。 如果指定了SEE_MASK_WAITFORINPUTIDLE标志, ShellExecuteEx 调用 WaitForInputIdle ,并在返回前等待新进程空闲,最大超时为 1 分钟。

有关何时需要此标志的进一步讨论,请参阅“备注”部分。

SEE_MASK_FLAG_DDEWAIT (0x00000100) 与SEE_MASK_NOASYNC相同,首选使用此选项。 SEE_MASK_DOENVSUBST (0x00000200) 展开 lpDirectory lpFile 成员在字符串中指定的任何环境变量。 SEE_MASK_FLAG_NO_UI (0x00000400) 如果发生错误,请不要显示错误消息框。 SEE_MASK_UNICODE (0x00004000) 使用此标志指示 Unicode 应用程序。 SEE_MASK_NO_CONSOLE (0x00008000) 用于为新进程继承父控制台,而不是创建一个新控制台。 这与将 CREATE_NEW_CONSOLE 标志与 CreateProcess 配合使用相反。 SEE_MASK_ASYNCOK (0x00100000) 可以在后台线程上执行执行,调用应立即返回,而无需等待后台线程完成。 请注意,在某些情况下 ,ShellExecuteEx 会忽略此标志,并等待进程在返回之前完成。 SEE_MASK_NOQUERYCLASSSTORE (0x01000000) SEE_MASK_HMONITOR (0x00200000) 在多监视器系统上指定监视器时使用此标志。 监视器在 hMonitor 成员中指定。 此标志不能与SEE_MASK_ICON结合使用。 SEE_MASK_NOZONECHECKS (0x00800000) 请勿执行区域检查。 此标志允许 ShellExecuteEx 绕过 IAttachmentExecute 放置的区域检查。 SEE_MASK_WAITFORINPUTIDLE (0x02000000) 创建新进程后,等待进程在返回之前处于空闲状态,超时一分钟。 有关更多详细信息,请参阅 WaitForInputIdle 。 SEE_MASK_FLAG_LOG_USAGE (0x04000000) 指示用户启动的启动,该启动可跟踪常用程序和其他行为。 SEE_MASK_FLAG_HINST_IS_SITE (0x08000000) hInstApp 成员用于指定实现 IServiceProvider 的对象 IUnknown 。 此对象将用作网站指针。 站点指针用于向 ShellExecute 函数、处理程序绑定过程和调用谓词处理程序提供服务。

若要在 Windows 8 之前在操作系统中使用SEE_MASK_FLAG_HINST_IS_SITE,请在程序中手动定义它:#define SEE_MASK_FLAG_HINST_IS_SITE 0x08000000。

如果指定此选项,则调用将在调用线程上同步运行。

类型: HWND

可选。 所有者窗口的句柄,用于显示和定位系统在执行此函数时可能生成的任何 UI。

lpVerb

类型: LPCTSTR

一个字符串,称为 谓词 ,指定要执行的操作。 可用谓词集取决于特定文件或文件夹。 通常,对象快捷菜单中可用的操作是可用的谓词。 此参数可以为 NULL ,在这种情况下,使用默认谓词(如果可用)。 否则,将使用“open”谓词。 如果两个谓词都不可用,则系统将使用注册表中列出的第一个谓词。 通常使用以下谓词:

  • 编辑 :启动编辑器并打开文档进行编辑。 如果 lpFile 不是文档文件,函数将失败。
  • 浏览 :浏览 lpFile 指定的文件夹。
  • find :从指定目录开始启动搜索。
  • 打开 :打开 由 lpFile 参数指定的文件。 该文件可以是可执行文件、文档文件或文件夹。
  • 打印 :打印 lpFile 指定的文档文件。 如果 lpFile 不是文档文件,函数将失败。
  • 属性 :显示文件或文件夹的属性。
  • runas :以管理员身份启动应用程序。 用户帐户控制 (UAC) 将提示用户同意运行提升的应用程序,或输入用于运行应用程序的管理员帐户的凭据。
  • lpFile

    类型: LPCTSTR

    以 null 结尾的字符串的地址,指定 ShellExecuteEx 将对其执行 lpVerb 参数指定的操作的文件或对象的名称。 ShellExecuteEx function 支持的系统注册表谓词包括可执行文件和文档文件的“open”,以及已为其注册打印处理程序的文档文件的“print”。 其他应用程序可能已通过系统注册表添加 Shell 谓词,例如用于.avi和 .wav 文件的“播放”。 若要指定 Shell 命名空间对象,请传递完全限定分析名称,并在 fMask 参数中设置 SEE_MASK_INVOKEIDLIST 标志。

    注意: 如果设置了 SEE_MASK_INVOKEIDLIST 标志,则可以使用 lpFile lpIDList 按其文件系统路径或 PIDL 分别标识该项。 必须设置两个值之一( lpFile lpIDList )。
    注意: 如果名称不包含路径,则假定当前目录。

    lpParameters

    类型: LPCTSTR

    可选。 包含应用程序参数的以 null 结尾的字符串的地址。 参数必须用空格分隔。 如果 lpFile 成员指定文档文件, 则 lpParameters 应为 NULL

    lpDirectory

    类型: LPCTSTR

    可选。 指定工作目录名称的以 null 结尾的字符串的地址。 如果此成员为 NULL ,则当前目录用作工作目录。

    nShow

    类型: int

    必需。 指定应用程序在打开时显示方式的标志; ShellExecute 函数列出的SW_值之一。 如果 lpFile 指定文档文件,则标志将直接传递给关联的应用程序。 由应用程序决定如何处理它。

    hInstApp

    类型: HINSTANCE

    [out]如果设置了SEE_MASK_NOCLOSEPROCESS并且 ShellExecuteEx 调用成功,它将此成员设置为大于 32 的值。 如果函数失败,则设置为指示失败原因的SE_ERR_XXX错误值。 尽管 hInstApp 被声明为 HINSTANCE ,以便与 16 位 Windows 应用程序兼容,但它不是真正的 HINSTANCE。 它只能转换为 int ,并且与以下SE_ERR_XXX错误代码进行比较。

    lpIDList

    类型: LPVOID

    绝对 ITEMIDLIST 结构的地址 (PCIDLIST_ABSOLUTE) 包含唯一标识要执行的文件的项目标识符列表。 如果 fMask 成员不包括 SEE_MASK_IDLIST SEE_MASK_INVOKEIDLIST ,则忽略此成员。

    lpClass

    类型: LPCTSTR

    以 null 结尾的字符串的地址,指定以下字符串之一:

  • ProgId。 例如,“Paint.Picture”。
  • URI 协议方案。 例如,“http”。
  • 文件扩展名。 例如,“.txt”。
  • HKEY_CLASSES_ROOT下的注册表路径,用于命名包含一个或多个 Shell 谓词的子项。 此键将具有符合 Shell 谓词注册表架构的子项,例如 shell \ 谓词名称
  • 如果 fMask 不包含 SEE_MASK_CLASSNAME ,则忽略此成员。

    hkeyClass

    类型: HKEY

    文件类型的注册表项的句柄。 此注册表项的访问权限应设置为KEY_READ。 如果 fMask 不包含 SEE_MASK_CLASSKEY ,则忽略此成员。

    dwHotKey

    类型:DWORD

    与应用程序关联的键盘快捷方式。 低序字是虚拟键代码,高阶单词是修饰符标志 (HOTKEYF_) 。 有关修饰标志的列表,请参阅 WM_SETHOTKEY 消息的说明。 如果 fMask 不包括 SEE_MASK_HOTKEY ,则忽略此成员。

    DUMMYUNIONNAME

    DUMMYUNIONNAME.hIcon

    类型: HANDLE

    文件类型图标的句柄。 如果 fMask 不包含 SEE_MASK_ICON ,则忽略此成员。 此值仅在 Windows XP 及更早版本中使用。 从 Windows Vista 开始,它将被忽略。

    DUMMYUNIONNAME.hMonitor

    类型: HANDLE

    要在其中显示文档的监视器的句柄。 如果 fMask 不包括 SEE_MASK_HMONITOR ,则忽略此成员。

    hProcess

    类型: HANDLE

    新启动应用程序的句柄。 此成员在返回时设置,并且始终为 NULL ,除非 fMask 设置为 SEE_MASK_NOCLOSEPROCESS 。 即使 fMask 设置为 SEE_MASK_NOCLOSEPROCESS ,如果未启动任何进程, hProcess 也将为 NULL 。 例如,如果要启动的文档是 URL,并且 Internet Explorer 的实例已经运行,它将显示该文档。 未启动新进程, hProcess 将为 NULL

    注意: ShellExecuteEx 并不总是返回 hProcess ,即使调用结果启动进程也是如此。 例如,使用 SEE_MASK_INVOKEIDLIST 调用 IContextMenu 时, hProcess 不会返回。

    如果调用 ShellExecuteEx 的线程没有消息循环,或者线程或进程将在 ShellExecuteEx 返回后不久终止,则必须指定 SEE_MASK_NOASYNC 标志。 在这种情况下,调用线程将不能用于完成 DDE 对话,因此在将控件返回到调用应用程序之前 ,ShellExecuteEx 完成会话非常重要。 未能完成对话可能会导致文档启动失败。

    如果调用线程有消息循环,并且调用 ShellExecuteEx 返回后将存在一段时间, 则SEE_MASK_NOASYNC 标志是可选的。 如果省略标志,则调用线程的消息泵将用于完成 DDE 对话。 调用应用程序会更快地重新获得控制权,因为可以在后台完成 DDE 对话。

    若要在 lpParameters 中包含双引号,请将每个标记括在一对引号中,如以下示例所示。

    sei.lpParameters = "An example: \"\"\"quoted text\"\"\"";
    

    在这种情况下,应用程序会收到三个参数:一个示例:“带引号的文本”。

    shellapi.h 标头将 SHELLEXECUTEINFO 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非中性编码别名与非非编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅 函数原型的约定