5

在我正在编写的程序的一部分中,我试图提取有关指定本地硬盘驱动器的设备信息。我已经能够使用 DriveInfo 类创建一些值返回方法,如下所示:

//Gets drive format
    public string GetDriveFormat(string driveName)
    {
        foreach (DriveInfo drive in DriveInfo.GetDrives())
        {
            if (drive.IsReady && drive.Name == driveName)
            {
                return drive.DriveFormat;
            }
        }
        return "";
    }
//Example of use
   MessageBox.Show(GetDriveFormat("C:\\"));

我现在遇到的问题是 DriveInfo 类似乎没有 Model 属性。我已经查看了所有内容,但无法找到一种方法来构造一个返回值的方法,该方法将返回驱动器的模型,就像在设备管理器中可以看到的一样。

任何帮助将不胜感激,谢谢!

4

4 回答 4

3

不幸的是,您无法使用DriveInfo该类获取驱动器的制造商和型号。

您将不得不求助于 WMI:

WqlObjectQuery q = new WqlObjectQuery("SELECT * FROM Win32_DiskDrive");
ManagementObjectSearcher res = new ManagementObjectSearcher(q);
foreach (ManagementObject o in res.Get()) {
Console.WriteLine("Caption = " + o["Caption"]);
Console.WriteLine("DeviceID = " + o["DeviceID"]);
Console.WriteLine("Decsription = " + o["Description"]);
Console.WriteLine("Manufacturer = " + o["Manufacturer"]);
Console.WriteLine("MediaType = " + o["MediaType"]);
Console.WriteLine("Model = " + o["Model"]);
Console.WriteLine("Name = " + o["Name"]);
// only in Vista, 2008 & etc: //Console.WriteLine("SerialNumber = " + o["SerialNumber"]);
}

不确定您是否还需要考虑已安装的驱动器:

foreach(ManagementObject volume in new ManagementObjectSearcher("Select * from Win32_Volume" ).Get())
{
 ...
}
于 2013-01-09T01:33:34.977 回答
0

我不完全确定您是否可以在不使用较低级别的 api 的情况下获得该信息。这篇文章应该可以帮助您实现目标。

http://www.codeproject.com/Articles/17973/How-To-Get-Hardware-Information-CPU-ID-MainBoard-I

链接的快速摘要:

  • 添加对System.Management库的引用

然后你可以使用:

var disks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
foreach (ManagementObject disk in disks.Get())
{
   Console.WriteLine(disk["Model"].ToString());
   Console.WriteLine("\tSerial: " + disk["SerialNumber"]);
}
于 2013-01-09T01:26:27.967 回答
0

您需要使用较低级别的 API 来获取此信息,即使那样它仍然可能不准确。* 硬盘驱动器的内部详细信息在 Win32 API 中公开,您仍然可以通过 WMI 在 C# 中访问它.

*:请注意,这仍然仅限于硬件信息,因为 Windows 能够看到它。在某些情况下,它不会或不能准确(例如,对于 RAID 阵列,Windows 将 N 个驱动器视为单个驱动器)。

于 2013-01-09T01:34:51.793 回答
0

这里有一些也可以为你工作的东西,你可以随意调整它

String drive = "c";
ManagementObject disk = new ManagementObject("Win32_LogicalDisk.DeviceID=\"" + drive + ":\"");
disk.Get();
Console.WriteLine(disk["VolumeName"]);
foreach (var props in disk.Properties)
{
    Console.WriteLine(props.Name + " " + props.Value);
}
Console.ReadLine();
于 2013-01-09T01:53:03.750 回答