Как получить рекомендуемые программы, связанные с расширением файла в C#
Я хочу получить путь к программам, связанным с расширением файла, желательно через Win32 API.
- список программ, который появляется в меню" Открыть с помощью" пункт
- список программ, которые отображаются, как рекомендовано в "открыть с помощью..." диалог.
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);
}
когда-либо хотели программно связать тип файла в системе с вашим приложением, но не понравилась идея копаться в реестре самостоятельно? Если да, то эта статья и Кодекс подходят именно вам.