在我写的程序的一部分中,我正在尝试提取有关指定本地硬盘的设备信息。我已经能够使用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属性。我看了一遍,但无法找到一种方法来构造一个返回值的方法,该方法将返回驱动器的模型,就像在设备管理器中可以看到的那样。
任何帮助将不胜感激, 谢谢!
答案 0 :(得分:3)
很遗憾,您无法使用DriveInfo
类获取Drive的制造商和型号。
你必须回到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())
{
...
}
答案 1 :(得分: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"]);
}
答案 2 :(得分:0)
您需要使用较低级别的API来获取此信息,即使这样,它仍然可能不准确。*硬盘驱动器的内部详细信息在Win32 API中公开,您仍然可以访问C#通过WMI。
*:请注意,这仍然限于硬件信息,因为Windows可以看到它。在某些情况下,它不会或不能准确(例如,使用RAID阵列,Windows将N个驱动器视为单个驱动器)。
答案 3 :(得分: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();