2014-03-04 70 views
2

我想知道是否有可能以某種方式使用ShellExecute一次使用默認動詞處理程序打開多個文件。例如,如果我在一個文件夾中有多個mp3文件,我可以選擇所有這些文件,然後右鍵單擊並選擇「播放」。這將啓動一個WMP實例(這是我的默認MP3播放器),並將我選擇的所有文件添加到當前播放列表中。ShellExecute多個文件

1)這是否使用一些標準化的ShellExecute行爲來完成?

2)或者這是通過首先確定默認程序是什麼,然後將文件列表作爲參數提供給該可執行文件來完成的?

我的目標是能夠獲取文件列表,並使用缺省程序的默認動詞打開它們(理想情況下,無需先查看註冊表)。

I.e.這相當於,但對於多個文件:

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

回答

6

沒有,ShellExecute不能做到這一點。相反,要做到這一點的方式是IContextMenu

從廣義上講:

  • 綁定與SHBindToObject
  • 查詢與IShellFolder::GetUIObjectOf
  • 有問題的文件上下文菜單中的父文件夾初始化的上下文菜單IContextMenu::QueryContextMenu,傳遞CMF_DEFAULTONLY標誌
  • IContextMenu::InvokeCommand調用默認命令
+0

這幾乎就是我所需要的。我發現的唯一問題是省略動詞(即告訴InvokeCommand使用默認動詞),對我來說不起作用(至少對於mp3文件而言)。這可能是默認動詞最終是「開放」,這似乎至少與WMP無關。但是,因爲我主要需要這個媒體文件,所以我應該能夠始終使用「播放」。 – pqvst