Как получить рекомендуемые программы, связанные с расширением файла в C#

Я хочу получить путь к программам, связанным с расширением файла, желательно через Win32 API.

  1. список программ, который появляется в меню" Открыть с помощью" пункт
  2. список программ, которые отображаются, как рекомендовано в "открыть с помощью..." диалог.

UPD:

предположим, что на моем компьютере установлены office11 и office12, программа по умолчанию для .xls-это офис 11. Если посмотреть на ¼ Excel.Лист.8shellоткрыть команда существует путь к office11 excel.exe, но когда я нажимаю правой кнопкой мыши на файл, я могу выбрать office12 в Open с пунктом меню. Так где же хранится эта ассоциация?

Я использую C#.

спасибо.

2 ответов


Я написал небольшую подпрограмму:

public IEnumerable<string> RecommendedPrograms(string ext)
{
  List<string> progs = new List<string>();

  string baseKey = @"Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\." + ext;

  using (RegistryKey rk = Registry.CurrentUser.OpenSubKey(baseKey + @"\OpenWithList"))
  {
    if (rk != null)
    {
      string mruList = (string)rk.GetValue("MRUList");
      if (mruList != null)
      {
        foreach (char c in mruList.ToString())
          progs.Add(rk.GetValue(c.ToString()).ToString());
      }
    }
  }

  using (RegistryKey rk = Registry.CurrentUser.OpenSubKey(baseKey + @"\OpenWithProgids"))
  {
    if (rk != null)
    {
      foreach (string item in rk.GetValueNames())
        progs.Add(item);
    }
    //TO DO: Convert ProgID to ProgramName, etc.
  }

  return progs;
  }

который называется так:

foreach (string prog in RecommendedPrograms("vb"))
{
  MessageBox.Show(prog);
}

когда-либо хотели программно связать тип файла в системе с вашим приложением, но не понравилась идея копаться в реестре самостоятельно? Если да, то эта статья и Кодекс подходят именно вам.

Ассоциация Системных Файлов