c# - 用所有已注册的文件类型(不仅仅是扩展名)填充 ComboBox 的最有效方法是什么

标签 c# file combobox registry

在 Windows 中用所有已注册的文件类型填充 ComboBox 最有效的方法是什么?

我想要完整的文件类型,而不仅仅是扩展名。我正在使用 VB 9 (VS2008)。

最佳答案

所有文件类型都存储在 HKEY_CLASS_ROOT 下的注册表中,您可以使用框架的 Registry class 获取它。 .

这是执行任务的 C# 代码:

using Microsoft.Win32;

public class FileAssoc
{
    public string Extension;
    public string Filetype;

    public FileAssoc(string fileext, string name)
    {
        Extension = fileext;
        Filetype = name;
    }
}

public static class EnumRegFiles
{
    public static List<FileAssoc> GetFileAssociations()
    {
        List<FileAssoc> result = new List<FileAssoc>();
        RegistryKey rk = Registry.ClassesRoot;

        String[] names = rk.GetSubKeyNames();
        foreach (string file in names)
        {
            if (file.StartsWith("."))
            {
                RegistryKey rkey = rk.OpenSubKey(file);
                object descKey = rkey.GetValue("");

                if (descKey != null)
                {
                    string desc = descKey.ToString();
                    if (!string.IsNullOrEmpty(desc))
                    {
                        result.Add(new FileAssoc(file, desc));
                    }
                }
            }
        }

        return result;
    }
}

关于c# - 用所有已注册的文件类型(不仅仅是扩展名)填充 ComboBox 的最有效方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/497777/

相关文章:

java - 将 HashMap 绑定(bind)到 ComboBox

c# - 覆盖 Winforms ComboBox 自动完成建议规则

c# - 如何从文件读取到流并显示为文本?

c# - 无法在 C# 中加载 C++ DLL

c# - 循环出 string[] 值的最简单方法是什么?

android - iOS - 访问应用程序创建的文件和文件夹

c# - 在 C# 中的对象之间传输事件处理程序

java - Java 中的输出文件不断被覆盖

delphi - Delphi:拒绝其他进程访问文件

delphi - Delphi 6 上的简单组合框问题