如何使用Windows API代码包获取根驱动器详细信息



我写了一个函数,它允许我获得任何文件的所有属性。
这个功能甚至适用于文件夹。

但是我提到过,没有"Windows API代码包"和使用"Shell32",你可以获得任何文件的308个属性。

        Shell32.Shell shell = new Shell32.Shell();
        shell.NameSpace(@"C:_testclip.mp4").GetDetailsOf(null, i); // i = 0...320

然而,使用"Windows API代码包"只有56个属性在"DefaultPropertyCollection"集合。
例如,这个集合中没有"Rating"属性。
然后我意识到,而不是"shellFile.Properties。"我应该看看"shellFile.Properties。系统"

    private void GetFileDatails(string path)
    {
        var shellFile = ShellFile.FromParsingName(path);
        textBox1.Text += shellFile.Properties.DefaultPropertyCollection.Count + "rn";
        shellFile.Properties.DefaultPropertyCollection.ToList().ForEach(el => textBox1.Text += el.Description.CanonicalName + "   -   " + el.Description.DisplayName + "   =   " + el.ValueAsObject + "rn");
        textBox1.Text += "rn" + shellFile.Properties.System.Rating;
    }

是的,这是真的!
但是,如何使用这个"shellFile.Properties.System"获得任何文件的200多个属性呢?
这甚至不是收藏!它是不可枚举的!你不能使用foreach循环!
你应该总是输入

      "shellFile.Properties.System.*"   //you should type this line more then 100 times

无论如何我也无法获得根驱动器的详细信息!
使用"Windows API代码包"或使用"Shell32"我无法得到任何分区的"驱动格式"!拜托!告诉我怎么知道"C盘"的细节?

您可以使用反射来枚举所有属性并获取它们的值,如下所示

static void Main(string[] args)
{
    string fileName = Path.Combine(Directory.GetCurrentDirectory(), "All Polished.mp4");
    ShellObject shellObject= ShellObject.FromParsingName(fileName);
    PropertyInfo[] propertyInfos = shellObject.Properties.System.GetType().GetProperties();
    foreach (var propertyInfo in propertyInfos)
    {
        object value = propertyInfo.GetValue(shellObject.Properties.System, null);
        if (value is ShellProperty<int?>)
        {
            var nullableIntValue = (value as ShellProperty<int?>).Value;
            Console.WriteLine($"{propertyInfo.Name} - {nullableIntValue}");
        }
        else if (value is ShellProperty<ulong?>)
        {
            var nullableLongValue =
                (value as ShellProperty<ulong?>).Value;
            Console.WriteLine($"{propertyInfo.Name} - {nullableLongValue}");
        }
        else if (value is ShellProperty<string>)
        {
            var stringValue =
                (value as ShellProperty<string>).Value;
            Console.WriteLine($"{propertyInfo.Name} - {stringValue}");
        }
        else if (value is ShellProperty<object>)
        {
            var objectValue =
                (value as ShellProperty<object>).Value;
            Console.WriteLine($"{propertyInfo.Name} - {objectValue}");
        }
        else
        {
            Console.WriteLine($"{propertyInfo.Name} - Dummy value");
        }
    }
    Console.ReadLine();
}

相关内容

  • 没有找到相关文章

最新更新