ShellExecute多个文件

pqv*_*vst 2 c++ winapi

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

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

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

我的目标是能够获取文件列表并使用默认动词和默认程序打开它们(理想情况下,无需首先通过注册表).

即相当于此,但对于多个文件:

ShellExecute(NULL, NULL, the_file_to_open, NULL, NULL, SW_SHOWNORMAL);
Run Code Online (Sandbox Code Playgroud)

Jon*_*ter 7

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

广义而言:

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