如何在C#中获取与文件扩展名相关的推荐程序

我想要获得与文件扩展名关联的程序的path,最好是通过Win32 API。

  1. 出现在“打开方式”菜单项目中的程序列表
  2. 显示为“打开方式…”对话框中推荐的程序列表。

UPD:

假设我在我的机器上安装了office11和office12,对于.xls的默认程序是office 11.如果看一下HKEY_CLASSES_ROOT \ Excel.Sheet.8 \ shell \ Open \ command有一个office11 excel.exe的path,但是当我右键点击文件,我可以在Open With menu项中selectoffice12。 那么这个关联存储在哪里?

我正在使用C#。

谢谢。

我写了一个小例程:

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); } 

曾经想以编程方式将系统上的文件类型与您的应用程序相关联,但不喜欢通过自己的注册表进行挖掘的想法? 如果是这样,那么这篇文章和代码是适合你的。

系统文件关联