جزاك الله كل خير
جربتها من قبل ولا تفلح المشكلة تحدث عندما تكون هناك العديد من الاقراص بالكمبيوتر ويكون القرص C الذي عليه النظام ليس هو الاول في التسجيل
فمثلا هذا الاستعلام
كود :
SELECT * FROM Win32_DiskDrive WHERE Index = '0'
لن يفيد لان القرص الذي عليه النظام ليس هو القرص الاول والنظام يفهرسه على انه الثاني او الثالث
ولهذا الخيار هو الاستعلام بحرف القرص وليس الفهرس
والحل هنا
كود :
class Program
{
static void Main(string[] args)
{
const string drive = "C:";
Console.WriteLine("Drive {0}'s Model Number is {1}", drive, GetModelFromDrive(drive));
}
public static string GetModelFromDrive(string driveLetter)
{
// Must be 2 characters long.
// Function expects "C:" or "D:" etc...
if (driveLetter.Length != 2)
return "";
try
{
using (var partitions = new ManagementObjectSearcher("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID='" + driveLetter +
"'} WHERE ResultClass=Win32_DiskPartition"))
{
foreach (var partition in partitions.Get())
{
using ( var drives = new ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] +
"'} WHERE ResultClass=Win32_DiskDrive"))
{
foreach (var drive in drives.Get())
{
return (string) drive["Model"];
}
}
}
}
}
catch
{
return "<unknown>";
}
// Not Found
return "<unknown>";
}
}
ولكنه سي شارب ويحتاج الى تحويل وحولته عن طريق احد المواقع كالتالي:
كود :
Class Program
Private Shared Sub Main(ByVal args As String())
Const drive As String = "C: "
Console.WriteLine("Drive {0}'s Model Number is {1}", drive, GetModelFromDrive(drive))
End Sub
Public Shared Function GetModelFromDrive(ByVal driveLetter As String) As String
If driveLetter.Length <> 2 Then Return ""
Try
Using partitions = New ManagementObjectSearcher("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID='" & driveLetter & "'} WHERE ResultClass=Win32_DiskPartition")
For Each Partition In partitions.[Get]()
Using drives = New ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" & Partition("DeviceID") & "'} WHERE ResultClass=Win32_DiskDrive")
For Each drive In drives.[Get]()
Return CStr(drive("Model"))
Next
End Using
Next
End Using
Catch
Return "<unknown>"
End Try
Return "<unknown>"
End Function
End Class
ولكن يوجد خطاء يقول الـ Partition غير معروف
مع العلم مستخدمي سي شارب يقولون انه يعمل
التحويل ينقص شئ ما