如何创建所有文件关联的c#列表(友好的应用程序名称&可执行文件)作为文件类型
本文关键字:文件 应用程序 可执行文件 类型 创建 何创建 列表 关联 | 更新日期: 2023-09-27 18:01:21
我想创建一个列表/字典的所有友好的应用程序名称和它们的可执行路径&指定文件类型的命令。我使用了AssocQueryString,但它只返回一个实例值。
例如:当我右键单击"。cs"文件并在上下文菜单中选择"Open With->"时,我的PC上的文件类型"。cs"有许多应用程序关联,例如"Microsoft Visual Studio 2008"&"Microsoft Visual Studio 2010"&"记事本","写字板"。
我如何枚举所有这些值到c#中的列表,显然它必须从注册表中提取,但我非常迷失在所有的"OpenWithList"answers"OpenWithProgids"键..
谢谢
在HKEY_CLASSES_ROOT中获取以"。"开头的密钥。读取它们的默认值(REG_SZ)以获取接下来要打开的密钥的名称。然后获取程序位置,读取"key_name'shell'open'command"中的默认值
这将使你获得与该文件类型相关联的默认应用程序。
它与OpenWithProgIds类似-其中的每个值名称都是密钥的密钥名称,您应该获得
的路径注:这是我刚写的代码,很乱,不安全你需要清理调用参数来获得纯应用位置。这只是一个开始
List<string> GetRegAssociatedFiles(string FileType)
{
List<string> _ret = new List<string>();
Microsoft.Win32.RegistryKey _rk = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(FileType);
string _defaultapp = _rk.GetValue("").ToString();
Microsoft.Win32.RegistryKey _rkapp = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(_defaultapp + "''shell''open''command");
_ret.Add(_rkapp.GetValue("").ToString());
_rkapp.Close();
string[] _subkeys = _rk.GetSubKeyNames();
for (int i = 0; i < _subkeys.Length; i++)
{
if (_subkeys[i] == "OpenWithProgIds")
{
Microsoft.Win32.RegistryKey _rkh = _rk.OpenSubKey(_subkeys[i]);
string[] _names = _rkh.GetValueNames();
for (int j = 0; j < _names.Length; j++)
{
if (_names[j] == "")
continue;
Microsoft.Win32.RegistryKey _rhelp = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(_names[j] + "''shell''open''command");
_ret.Add(_rhelp.GetValue("").ToString());
_rhelp.Close();
}
}
}
_rk.Close();
return _ret;
}