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

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

  1. Список программ, которые появляются в меню «Открыть с помощью» пункт
  2. Список программ, отображаемых в соответствии с рекомендациями Диалог «Открыть с помощью ...».

UPD:

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

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

Спасибо.

Ответы [ 2 ]

12 голосов
/ 17 июля 2011

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

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);
}
3 голосов
/ 13 июля 2011

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

Системная ассоциация файлов

...