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

これはあなたのためにも働くことができるものですあなたが好きなようにそれを自由に微調整してください

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 に答える
0

この情報を取得するには、下位レベルの API を使用する必要がありますが、それでも正確ではない可能性があります。* ハード ドライブの内部の詳細は Win32 API で公開されており、WMI を介して C# でアクセスできます。 .

*: これは、Windows が参照できるハードウェア情報に限定されていることに注意してください。状況によっては、正確でないか、正確ではない場合があります (たとえば、Windows が N 台のドライブを単一のドライブと見なす RAID アレイの場合)。

于 2013-01-09T01:34:51.793 に答える
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 に答える