- Код: Выделить всё
Option Strict Off
Option Explicit On
Friend Class Form1
Inherits System.Windows.Forms.Form
Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
Dim objItem As Object
Dim colItems As Object
Dim objWMIService As Object
Dim strComputer As Object
strComputer = "."
objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\WMI")
colItems = objWMIService.ExecQuery("Select * From MSStorageDriver_FailurePredictData")
For Each objItem In colItems
If IsDBNull(objItem.VendorSpecific) Then
Text1.Text = Text1.Text & vbCr & vbCr & vbCr & "VendorSpecific: " & vbCr & vbCr
Else
Text1.Text = Text1.Text & vbCr & vbCr & vbCr & "VendorSpecific: " & vbCr & vbCr
'Распечатываем массив S.M.A.R.T.
For i As Integer = 0 To 511
Text1.Text = Text1.Text & vbCr & "i = " & i & ", Значение = " & objItem.VendorSpecific(i)
Next
End If
Next objItem
End Sub
End Class
Но считываются только массивы данных S.M.A.R.T. для PATA (IDE) винчестеров, а вот хотелось бы знать темературу и SATA дисков. К тому же надо знать к какому винчестеру относится каждый массив атрибутов S.M.A.R.T.
Да ещё и адрес температуры в массиве зависит от версии структуры атрибутов.
Например:
I винчестер PATA
I = 0, Значение = 10 - версия структуры атрибутов
Температура
I = 100, Значение = 0 Пороговое
I = 101, Значение = 31 Текущее
I = 102, Значение = 53 Худшее
II винчестер PATA
I = 0, Значение = 16 - версия структуры атрибутов
Температура
I = 148, Значение = 0 Пороговое
I = 149, Значение = 157 Текущее
I = 150, Значение = 157 Худшее
А 157 Everest как-то пересчитывает и получает 35 град. цельсия.
Неясно сколько версий структуры атрибутов всего существует. Скачал исходник на Delphi, но и там данные с SATA-винчестеров не считываются.
Если есть знаток WMI или S.M.A.R.T. , то посоветуйте как быть.