启动应用程序

来源:互联网 发布:mac 系统占用空间太大 编辑:程序博客网 时间:2024/05/24 03:01

MSDN 2005 -> Win32 和 COM 开发 -> User Interface -> Windows User Experience -> Windows Shell -> Windows Shell -> Shell Programmer's Guide -> Shell Basics -> Launching Applications

定位某文件对象后,程序下一步要做的通常是对其执行某种操作。比如说,程序可能想启动另外一个程序来修改某数据文件。对于可执行文件,程序可能要求简单地启动它。本文讨论如何使用ShellExecuteShellExecuteEx来执行这些任务。

使用ShellExecute和ShellExecuteEx

要使用ShellExecute或者ShellExecuteEx,必须指定要对其执行操作的文件或者文件夹对象,以及用以指定操作类型的动词(verb)。对于ShellExecute,需要把这些值赋给合适的参数。对于ShellExecuteEx,则需要填充到SHELLEXECUTEINFO结构体的合适成员中。此外还有其他一些成员或者参数用以精确调节这两个函数的行为。

文件或者文件夹对象可以是文件系统的一部分,也可以是虚拟对象,并且可以由其路径或者PIDL标识。

对象动词

实际上,可用的动词就是对象的快捷菜单中的条目。在注册表条目

HKEY_CLASSES_ROOT/CLSID/{object_clsid}/Shell/verb

中可以找到可用的动词。这里object_clsid是对象的类型标示符(CLSID);verb是可用动词的名称。verb/command子键指示动词被调用时将执行的操作。

在注册表条目

HKEY_CLASSES_ROOT/object_name/shell/verb

中可以找到对于预定义的Shell对象可用的动作。这里object_name是预定义的Shell对象的名字。类似地,verb/command子键指示动词被调用时将执行的操作。

常见的可用动词如下:

动词 描述 edit  启动一个编辑器,并且打开文档进行编辑 find  发起一个从指定目录开始的搜索 open  启动应用程序。如果文件不是可执行文件,则启动其关联到的应用程序 print  打印文档文件 properties  显示对象属性

每个动词都对应一个从控制台窗口启动应用所需的命令。open通常是被支持的,就以它为例。对于.exe文件,open简单地启动程序。然而,它更常见的用途是启动操作特定文件的应用程序。比如说,.txt文件可以被写字板程序打开。因此,.txt文件的open动作将对应类似下面的命令:

"C:/Program Files/Windows NT/Accessories/Wordpad.exe" "%1"

这样,使用ShellExecute或者ShellExecuteEx打开.txt文件时,Wordpad.exe将被启动,而指定的文件名是其参数。某些命令可能还有额外的参数,比如说标志,以确保正确地启动程序。关于快捷菜单和动词的更深入讨论,见Extending Shortcut Menus

通常,确定对某特定文件可用的动词列表是很复杂的。然而,在很多情况下,可以简单地为lpVerb参数指定NULL,这样会调用文件类型的默认命令。这通常等价于设定动词为open,然而,某些文件类型可能有不同的默认命令。更详尽的信息,见Extending Shortcut MenusShellExecuteEx的参考文档。 

使用ShellExecute启动搜索对话框

右键单击资源管理器中某文件夹图标时,快捷菜单中有一项是“搜索”。如果选择这一项,Shell会启动搜索工具。搜索工具显示可用于搜索指定文本串的对话框。通过在lpVerb参数中指定find,在lpFile参数中指定目录路径,ShellExecute也可以启动搜索工具。比如说,下面这行代码为C:/MyPrograms目录启动搜索工具:

ShellExecute(hwnd,"find","c:/MyPrograms",NULL,NULL,0); 

使用ShellExecuteEx的简单例子

下面的控制台应用程序代码展示了ShellExecuteEx的使用。为使结构清晰,省略了大部分错误检查代码。

<…… 省略示例代码 ……>

程序首先获取Windows目录的PIDL,然后枚举其内容直到找到第一个.bmp文件。与前面的例子不同的是,IShellFolder::GetDisplayNameOf用于获取文件的解析名,而不是显示名。因为这是个系统文件夹,ShellExecuteEx需要其解析名作为全限定路径。定位到第一个.bmp文件后,为SHELLEXECUTEINFO结构体的成员赋给合适的值。lpFile成员被赋值为文件的解析名,lpVerb成员被设置为NULL,表示启动默认操作。在本例中,默认操作是open。然后把结构体传给ShellExecuteEx,启动位图文件的默认处理程序(通常是MSPaint.exe)来打开文件。ShellExecuteEx返回后,PIDL和IShellFolder接口被释放。


菊子曰 今天你菊子曰了么?
原创粉丝点击