加载应用程序(ShellExecute,ShellExecuteEx,SHELLEXECUTEINFO)

https://docs.microsoft.com/en-us/windows/desktop/shell/launch

一旦你的应用程序定位了一个文件,下一个对其进行的步骤就是对其进行某些操作。例如,你的应用程序可能想加载另外的一个应用程序,以允许用户修改该文件。如果该文件是可执行的,你的应用程序可能想简单的加载它。这个文章将讨论,如何使用ShellExecute 和 ShellExecuteEx 来执行这些任务。

 

使用ShellExecute 和 ShellExecuteEx

为了使用ShellExecute 和 ShellExecuteEx,你的应用程序必须指定想要操作的文件或文件夹,以及该操作对应的verb。对于ShellExecute,设置正确的参数即可,对于ShellExecuteEx,正确的填充SHELLEXECUTEINFO 结构体。

文件和文件夹对象可以是文件系统的一部分,或者虚拟对象,它们可以通过路径标志,也可以通过PIDLS 标志。

 

对象Verbs

对象上可以使用的verb 实质上是可以在其shortcutmenu 上找到的向。为了查找哪些verb 是可用的,查找如下的注册表键:

HKEY_CLASSES_ROOT\CLSID\{object_clsid}\Shell\verb

这里,object_clsid 是 该对象的CLSID

该verb\command 子键指定了,当该verb 被调用的时候,发生了什么。

 

为了找到对于预定义的shell 对象,哪些verb 是可用的,查找如下项:

HKEY_CLASSES_ROOT\object_name\shell\verb

这里object_name 是预定义的shell 对象的名字。

 

通常的可得的verb包括:

VerbDescription
editLaunches an editor and opens the document for editing.
findInitiates a search starting from the specified directory.
openLaunches an application. If this file is not an executable file, its associated application is launched.
printPrints the document file.
properties

Displays the object's properties

每个verb 对应将从console windows 使用的加载应用程序的命令。

当你使用ShellExecute 或 ShellExecuteEx 来打开一个.txt 文件,Wordpad.exe被执行,并传入指定的文件,作为它的参数。其它的一些命令,可能有额外的参数,比如,Flags。

通常,判断一个特定的文件上可以使用的verb 是一个复杂的工作。许多情况下,可以设置lpVerb 参数为NULL,即调用该文件类型对应的默认的命令。这个过程,通常,等同于,设置lpVerb 为“open”,但一些文件类型,可能有其它的默认的命令。

 

我的需求是自动的在某个文件夹/文件上执行特定的contextmenu,但是这个ShellExecute 只能执行静态的verb,因此满足不了需求。

 

另外,如果想学习windows shell 编程:请参考:

http://read.pudn.com/downloads78/ebook/296149/Visual.C++.Windows.Shell.Programming.Wrox.pdf

该书比较老了,但是一些基础的东西讲的还是比较明白的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值