我想要获得与文件扩展名关联的程序的path,最好是通过Win32 API。
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); }
曾经想以编程方式将系统上的文件类型与您的应用程序相关联,但不喜欢通过自己的注册表进行挖掘的想法? 如果是这样,那么这篇文章和代码是适合你的。
系统文件关联