我终于获取到硬盘Smart信息了,但不会解读,请各位帮忙。

「已注销」 2009-08-11 04:26:24
我终于获取到硬盘Smart信息了,但不会解读,请各位帮忙。

代码:

Option Explicit

Dim WMI As Object, Objs As Object, Obj As Object, Bian()

Private Sub Form_Load()
Set WMI = GetObject("WinMgmts:root\WMI")
Set Objs = WMI.ExecQuery("SELECT * FROM MSStorageDriver_ATAPISmartData")
For Each Obj In Objs
Bian = Obj.VendorSpecific
Next

MsgBox Join(Bian)

End Sub


得到了如下结果:

10 0 1 15 0 116 100 142 234 190 6 0 0 0 3 3 0 95 95 0 0 0 0 0 0 0 4 50 0 99 99 190 5 0 0 0 0 0 5 51 0 100 100 0 0 0 0 0 0 0 7 15 0 81 60 48 238 206 8 0 0 0 9 50 0 94 94 216 22 0 0 0 0 0 10 19 0 100 100 0 0 0 0 0 0 0 12 50 0 99 99 252 5 0 0 0 0 0 187 50 0 100 100 0 0 0 0 0 0 0 189 58 0 100 100 0 0 0 0 0 0 0 190 34 0 56 51 44 0 26 44 0 0 0 194 34 0 44 49 44 0 0 0 12 0 0 195 26 0 57 48 165 148 14 2 0 0 0 197 18 0 100 100 0 0 0 0 0 0 0 198 16 0 100 100 0 0 0 0 0 0 0 199 62 0 200 200 0 0 0 0 0 0 0 200 0 0 100 253 0 0 0 0 0 0 0 202 50 0 100 253 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

我还看到了以下这段话:第一个和第二个字节代表 SMART 版本信息,从第三个字节起定义 SMART 的属性,每个属性为12字节长,每个属性的第一字节为当前属性定义,0x09 定义已经使用的小时数, 0xc2 为温度属性,第五字节表示当前温度。

我发现这些数字好像都是小于255的,请问如何从这些数字得到硬盘温度、硬盘使用时间。
我的硬盘用了5848小时,温度44度。
...全文
2905 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxjcw 2011-12-25
  • 打赏
  • 举报
回复
仅供参考,
Dim WMI As Object, Objs As Object, Obj As Object, Bian()


Set WMI = GetObject("WinMgmts:root\WMI")
Set Objs = WMI.ExecQuery("SELECT * FROM MSStorageDriver_ATAPISmartData")
For Each Obj In Objs
Bian = Obj.VendorSpecific
Next

For i = 2 To UBound(Bian)
If Bian(i) = 9 Then
MsgBox "硬盘累计运行" & Bian(i + 11) * 256 + Bian(i + 10) * 256 + Bian(i + 9) * 256 + Bian(i + 8) * 256 + Bian(i + 7) * 256 + Bian(i + 6) * 256 + Bian(i + 5) & "小时"
'Debug.Print Bian(i + 11) * 256 + Bian(i + 10) * 256 + Bian(i + 9) * 256 + Bian(i + 8) * 256 + Bian(i + 7) * 256 + Bian(i + 6) * 256 + Bian(i + 5)
End If
Next


JustInsist 2011-10-20
  • 打赏
  • 举报
回复
10,0,1,15,0,83,70,...9,50,0,93,93,23,26,(23,26就是使用时间26*256+23 = 6679,找到9开头就行)0,0,240,243,27....194,18,0,35,59,35,(这个就是温度,找到194就可以了)

9(0x09 定义已经使用的小时数)
194(0xc2 为温度属性,c*16+2)

但是我的64位windows7和 windows2003 用WMI根本不支持。所以还是有缺陷,估计要用DeviceIoControl来得到smart的值。
独孤不羁 2011-05-03
  • 打赏
  • 举报
回复
对,我也想要你的办法,麻烦回复邮件
alonedevil@qq.com
chrishsutw 2009-08-19
  • 打赏
  • 举报
回复
請教 p7a41679d 大大,是否可以告訴我,你用什麼方法讀取到硬盤與使用時間,謝謝!

chrishsutw@yahoo.com
「已注销」 2009-08-12
  • 打赏
  • 举报
回复
谢谢大家。我已经能读取硬盘温度和使用时间了。
「已注销」 2009-08-11
  • 打赏
  • 举报
回复
请问这个Obj.TotalTime是什么意思?我试了一下显示出来的值是430,这是什么?我的硬盘使用时间用HDTune查看是5848小时。还有就是硬盘温度也没有通过上面的代码显示出来。
脆皮大雪糕 2009-08-11
  • 打赏
  • 举报
回复
其实这是一个结构,第一个和第二个字节代表 SMART 版本信息,从第三个字节起定义 SMART 的属性,每个属性为12字节长,每个属性的第一字节为当前属性定义,0x09 定义已经使用的小时数, 0xc2 为温度属性,

其实这些属性已经包含在你代码的那个obj变量里面了

挑选几个你可能用到的属性,改改代码


Private Sub Form_Load()
Set WMI = GetObject("WinMgmts:root\WMI")
Set Objs = WMI.ExecQuery("SELECT * FROM MSStorageDriver_ATAPISmartData")
For Each Obj In Objs
Debug.Print "Active:" & vbTab & Obj.active
Debug.Print "TotalTime:" & vbTab & Obj.TotalTime
Debug.Print "InstanceName:" & vbTab & Obj.InstanceName
Debug.Print "SelfTestStatus:" & vbTab & Obj.SelfTestStatus
Next
End Sub



LUOLZD001 2009-08-11
  • 打赏
  • 举报
回复
不会,ding
jhone99 2009-08-11
  • 打赏
  • 举报
回复
搜索“硬盘Smart信息”
倒大霉的上帝 2009-08-11
  • 打赏
  • 举报
回复
参考
http://www.codeproject.com/KB/winsdk/Hard_drive_Information.aspx
「已注销」 2009-08-11
  • 打赏
  • 举报
回复
我的可用分都花光了,请各位帮一下。
「已注销」 2009-08-11
  • 打赏
  • 举报
回复
请各位帮我一下。

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧