壳执行多个文件

ShellExecute multiple files

本文关键字:文件 执行      更新时间:2023-10-16

我想知道是否可以以某种方式使用 ShellExecute 使用默认谓词处理程序一次打开多个文件。例如,如果我在一个文件夹中有多个mp3文件,则可以选择所有文件,然后右键单击并选择"播放"。这将打开WMP的一个实例(这是我的默认mp3播放器),并将我选择的所有文件添加到当前播放列表中。

1)这是使用一些标准化的ShellExecute行为完成的吗?

2)还是通过首先确定默认程序是什么,然后将文件列表作为参数提供给该可执行文件来完成的?

我的目标是能够获取文件列表并使用默认动词和默认程序打开它们(理想情况下不必先挖掘注册表)。

即等效于此,但对于多个文件:

ShellExecute(NULL, NULL, the_file_to_open, NULL, NULL, SW_SHOWNORMAL);

不,ShellExecute不能这样做。相反,做到这一点的方法是 IContextMenu .

从广义上讲:

  • 使用 SHBindToObject 绑定到父文件夹
  • 使用IShellFolder::GetUIObjectOf查询相关文件的上下文菜单
  • 使用 IContextMenu::QueryContextMenu 初始化上下文菜单,传递 CMF_DEFAULTONLY 标志
  • 使用 IContextMenu::InvokeCommand 调用默认命令