找回密码
 加入
搜索
查看: 8788|回复: 18

[系统综合] 求解硬盘使用时间

 火.. [复制链接]
发表于 2010-4-7 08:56:18 | 显示全部楼层 |阅读模式
本帖最后由 rikthhpgf2005 于 2010-4-7 13:04 编辑

如何读取硬盘使用时间????

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-4-7 09:01:59 | 显示全部楼层
 楼主| 发表于 2010-4-7 09:14:54 | 显示全部楼层
回复 2# 水木子


    没发错!指教?
发表于 2010-4-7 14:08:37 | 显示全部楼层
错没错,好好看看
发表于 2010-4-7 14:57:27 | 显示全部楼层
本帖最后由 dtooboss 于 2010-4-7 14:59 编辑

au3没这么强大,准确的说,au3连硬盘分区表之类的都不能够直接操作,更别提这些存储在硬盘的逻辑电路中的信息了,
这个需要专用工具读取,需要读取硬盘的ram bios中的信息,类似于主板的bios cmos 读取。

折中的办法是,找个提供了这个bios接口的动态链接库文件,用dllcall or api 来操作。
发表于 2010-4-7 15:07:57 | 显示全部楼层
AU3现在好像不能实现这个功能
发表于 2010-4-7 15:43:52 | 显示全部楼层
想到了一个办法,正在写代码中.........................
 楼主| 发表于 2010-4-7 16:16:30 | 显示全部楼层
回复 7# dtooboss


     =====

评分

参与人数 1金钱 -20 收起 理由
pusofalse -20 禁止无意义回复。

查看全部评分

发表于 2010-4-7 16:52:12 | 显示全部楼层
回复 8# rikthhpgf2005

数据自己分离

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2010-4-7 17:05:57 | 显示全部楼层
回复 9# dtooboss


    谢谢!!!!!!!!!!
发表于 2010-4-7 17:13:39 | 显示全部楼层
回复 5# dtooboss

很惊讶,学习中。。
发表于 2010-4-7 17:36:45 | 显示全部楼层
本帖最后由 dtooboss 于 2010-4-7 17:38 编辑
回复  dtooboss


    谢谢!!!!!!!!!!
rikthhpgf2005 发表于 2010-4-7 17:05


取得不同的硬盘的状态需要指定盘符,也可通过下拉菜单传递参数

还可以释放exe到内存中运行。具体看你需求了。
 楼主| 发表于 2010-4-8 09:12:39 | 显示全部楼层
WMI实现
#include <array.au3>

Const $wbemFlagReturnImmediately = 0x10
Const $wbemFlagForwardOnly = 0x20

Dim $strComputer = "."  ; Retrieve remote data fill in the "Remote Computer IP or Name"

Dim $objWMIService, $oMyError, $oDict
Dim $colItems, $strReserved, $strVendorSpecific, $strVendorSpecific4, $Output

; Initialize error handler and Objects
        $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")
        $objWMIService = ObjGet("winmgmts:\" & $strComputer & "\root\WMI")
        $oDict = ObjCreate("Scripting.Dictionary")

        $colItems1 = $objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_ATAPISmartData", "WQL", _
                                          $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
        
        $colItems2 = $objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_FailurePredictThresholds", "WQL", _
                                          $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
                                                                                  
        $colItems3 = $objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_FailurePredictStatus", "WQL", _
                                          $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
        _CreateDict() ; Create Dictionary
        
        ConsoleWrite ($strComputer&@CR)                                                          
        
        For $objItem In $colItems3
      $strVendorSpecific3 = $objItem.PredictFailure
          $strVendorSpecific3 = $objItem.Reason
          ConsoleWrite ("PredictFailure: " & $strVendorSpecific3&@CR)
          ConsoleWrite ("PredictReason: " & $strVendorSpecific3&@CR)
    Next
        
        For $objItem In $colItems2
      $strVendorSpecific2 = $objItem.VendorSpecific
          ConsoleWrite ("FailurePredictThresholds: " & _ArrayToString($strVendorSpecific2,",")&@CR)
    Next

   For $objItem In $colItems1
      ConsoleWrite ("Active: " & $objItem.Active&@CR)
      ConsoleWrite ("Checksum: " & $objItem.Checksum&@CR)
      ConsoleWrite ("ErrorLogCapability: " & $objItem.ErrorLogCapability&@CR)
      ConsoleWrite ("ExtendedPollTimeInMinutes: " & $objItem.ExtendedPollTimeInMinutes&@CR)
      ConsoleWrite ("InstanceName: " & $objItem.InstanceName&@CR)
      ConsoleWrite ("Length: " & $objItem.Length&@CR)
      ConsoleWrite ("OfflineCollectCapability: " & $objItem.OfflineCollectCapability&@CR)
      ConsoleWrite ("OfflineCollectionStatus: " & $objItem.OfflineCollectionStatus&@CR)
                $strReserved = $objItem.Reserved
      ConsoleWrite ("Reserved: " & _ArrayToString($strReserved,",")&@CR)
          ConsoleWrite ("SelfTestStatus: " & $objItem.SelfTestStatus&@CR)
      ConsoleWrite ("ShortPollTimeInMinutes: " & $objItem.ShortPollTimeInMinutes&@CR)
      ConsoleWrite ("SmartCapability: " & $objItem.SmartCapability&@CR)
      ConsoleWrite ("TotalTime: " & $objItem.TotalTime&@CR)
        $strVendorSpecific = $objItem.VendorSpecific
                
                
        ConsoleWrite ("VendorSpecific: " & _ArrayToString($strVendorSpecific,",")&@CR)
        ConsoleWrite ("VendorSpecific2: " & $objItem.VendorSpecific2&@CR)
        ConsoleWrite ("VendorSpecific3: " & $objItem.VendorSpecific3&@CR)
                $strVendorSpecific4 = $objItem.VendorSpecific4
        ConsoleWrite ("VendorSpecific4: " & _ArrayToString($strVendorSpecific4,",")&@CR)
Next

Dim $Temp[17] = [$strVendorSpecific[5] > $strVendorSpecific2[3],$strVendorSpecific[17] > $strVendorSpecific2[15]]
Dim $Status [17]
Select
        Case $Temp[1] > 0
                $Status[1] = "OK"
        Case $Temp[2] > 0
                $Status[2] = "OK"
        Case $strVendorSpecific[29] > $strVendorSpecific2[27]
                $Status[3] = "OK"
        Case $strVendorSpecific[41] > $strVendorSpecific2[39]
                $Status[4] = "OK"
        Case $strVendorSpecific[53] > $strVendorSpecific2[51]
                $Status[5] = "OK"
        Case $strVendorSpecific[65] > $strVendorSpecific2[63]
                $Status[6] = "OK"
        Case $strVendorSpecific[77] > $strVendorSpecific2[75]
                $Status[7] = "OK"
        Case $strVendorSpecific[89] > $strVendorSpecific2[87]
                $Status[8] = "OK"
        Case $strVendorSpecific[101] > $strVendorSpecific2[99]
                $Status[9] = "OK"
        Case $strVendorSpecific[113] > $strVendorSpecific2[111]
                $Status[10] = "OK"
        Case $strVendorSpecific[125] > $strVendorSpecific2[123]
                $Status[11] = "OK"
        Case $strVendorSpecific[137] > $strVendorSpecific2[135]
                $Status[12] = "OK"
        Case $strVendorSpecific[149] > $strVendorSpecific2[147]
                $Status[13] = "OK"
        Case $strVendorSpecific[161] > $strVendorSpecific2[159]
                $Status[14] = "OK"
        Case $strVendorSpecific[173] > $strVendorSpecific2[171]
                $Status[15] = "OK"
        Case $strVendorSpecific[185] > $strVendorSpecific2[183]
                $Status[16] = "OK"
        Case $strVendorSpecific[197] > $strVendorSpecific2[195]
                $Status[17] = "OK"
        Case Else
                $Status = "Not OK"
EndSelect

Dim $Output1= "ID"&@tab&"Attribute"&@tab&@tab&@tab&@tab&"Flag"&@tab&"Threshold"&@tab&"Value"&@tab&"Worst"&@tab&"Raw"&@tab&"Status"&@CR _
                &$strVendorSpecific[2]&@tab&$oDict.Item($strVendorSpecific[2])&@tab&@tab&@tab&$strVendorSpecific[3]&@tab&$strVendorSpecific2[3]&@tab&$strVendorSpecific[5]&@tab&$strVendorSpecific[6]&@tab&@tab&$Status[1]&@CR _
                &$strVendorSpecific[14]&@tab&$oDict.Item($strVendorSpecific[14])&@tab&@tab&@tab&$strVendorSpecific[15]&@tab&$strVendorSpecific2[15]&@tab&$strVendorSpecific[17]&@tab&$strVendorSpecific[18]&@tab&@tab&$Status[2]&@CR _
                &$strVendorSpecific[26]&@tab&$oDict.Item($strVendorSpecific[26])&@tab&@tab&@tab&$strVendorSpecific[27]&@tab&$strVendorSpecific2[27]&@tab&$strVendorSpecific[29]&@tab&$strVendorSpecific[30]&@tab&@tab&$Status[3]&@CR _
                &$strVendorSpecific[38]&@tab&$oDict.Item($strVendorSpecific[38])&@tab&@tab&$strVendorSpecific[39]&@tab&$strVendorSpecific2[39]&@tab&$strVendorSpecific[41]&@tab&$strVendorSpecific[42]&@tab&@tab&$Status[4]&@CR _
                &$strVendorSpecific[50]&@tab&$oDict.Item($strVendorSpecific[50])&@tab&@tab&$strVendorSpecific[51]&@tab&$strVendorSpecific2[51]&@tab&$strVendorSpecific[53]&@tab&$strVendorSpecific[54]&@tab&@tab&$Status[5]&@CR _
                &$strVendorSpecific[62]&@tab&$oDict.Item($strVendorSpecific[62])&@tab&@tab&$strVendorSpecific[63]&@tab&$strVendorSpecific2[63]&@tab&$strVendorSpecific[65]&@tab&$strVendorSpecific[66]&@tab&@tab&$Status[6]&@CR _
                &$strVendorSpecific[74]&@tab&$oDict.Item($strVendorSpecific[74])&@tab&@tab&@tab&$strVendorSpecific[75]&@tab&$strVendorSpecific2[75]&@tab&$strVendorSpecific[77]&@tab&$strVendorSpecific[78]&@tab&@tab&$Status[7]&@CR _
                &$strVendorSpecific[86]&@tab&$oDict.Item($strVendorSpecific[86])&@tab&@tab&$strVendorSpecific[87]&@tab&$strVendorSpecific2[87]&@tab&$strVendorSpecific[89]&@tab&$strVendorSpecific[90]&@tab&@tab&$Status[8]&@CR

Dim $Output2=$strVendorSpecific[98]&@tab&$oDict.Item($strVendorSpecific[98])&@tab&@tab&$strVendorSpecific[99]&@tab&$strVendorSpecific2[99]&@tab&$strVendorSpecific[101]&@tab&$strVendorSpecific[102]&@CR _
                &$strVendorSpecific[110]&@tab&$oDict.Item($strVendorSpecific[110])&@tab&@tab&@tab&$strVendorSpecific[111]&@tab&$strVendorSpecific2[111]&@tab&$strVendorSpecific[113]&@tab&$strVendorSpecific[114]&@CR _
                &$strVendorSpecific[122]&@tab&$oDict.Item($strVendorSpecific[122])&@tab&@tab&@tab&$strVendorSpecific[123]&@tab&$strVendorSpecific2[123]&@tab&$strVendorSpecific[125]&@tab&$strVendorSpecific[126]&@CR _
                &$strVendorSpecific[134]&@tab&$oDict.Item($strVendorSpecific[134])&@tab&@tab&$strVendorSpecific[135]&@tab&$strVendorSpecific2[135]&@tab&$strVendorSpecific[137]&@tab&$strVendorSpecific[138]&@CR _
                &$strVendorSpecific[146]&@tab&$oDict.Item($strVendorSpecific[146])&@tab&$strVendorSpecific[147]&@tab&$strVendorSpecific2[147]&@tab&$strVendorSpecific[149]&@tab&$strVendorSpecific[150]&@CR _
                &$strVendorSpecific[158]&@tab&$oDict.Item($strVendorSpecific[158])&@tab&@tab&$strVendorSpecific[159]&@tab&$strVendorSpecific2[159]&@tab&$strVendorSpecific[161]&@tab&$strVendorSpecific[162]&@CR _
                &$strVendorSpecific[170]&@tab&$oDict.Item($strVendorSpecific[170])&@tab&@tab&$strVendorSpecific[171]&@tab&$strVendorSpecific2[171]&@tab&$strVendorSpecific[173]&@tab&$strVendorSpecific[174]&@CR _
                &$strVendorSpecific[182]&@tab&$oDict.Item($strVendorSpecific[182])&@tab&@tab&@tab&$strVendorSpecific[183]&@tab&$strVendorSpecific2[183]&@tab&$strVendorSpecific[185]&@tab&$strVendorSpecific[186]&@CR _
                &$strVendorSpecific[194]&@tab&$oDict.Item($strVendorSpecific[194])&@tab&$strVendorSpecific[195]&@tab&$strVendorSpecific2[195]&@tab&$strVendorSpecific[197]&@tab&$strVendorSpecific[198] _        

MsgBox(0,"Output : "&$strComputer, $Output1&$Output2)


Func _CreateDict()
        $oDict.Add(1,"Read Error Rate")
        $oDict.Add(2,"Throughput Performance")
        $oDict.Add(3,"Spin-Up Time")
        $oDict.Add(4,"Start/Stop Count")
        $oDict.Add(5,"Reallocated Sectors Count")
        $oDict.Add(6,"Read Channel Margin")
        $oDict.Add(7,"Seek Error Rate Rate")
        $oDict.Add(8,"Seek Time Performance")
        $oDict.Add(9,"Power-On Hours (POH)")
        $oDict.Add(10,"Spin Retry Count")
        $oDict.Add(12,"Device Power Cycle Count")
        $oDict.Add(191,"G-Sense Error Rate Frequency")
        $oDict.Add(192,"Power-Off Park Count")
        $oDict.Add(193,"Load/Unload Cycle")
        $oDict.Add(194,"HDA Temperature")
        $oDict.Add(195,"ECC Corrected Count")
        $oDict.Add(196,"Reallocated Event Count")
        $oDict.Add(197,"Current Pending Sector Count")
        $oDict.Add(198,"Uncorrectable Sector Count")
        $oDict.Add(199,"UltraDMA CRC Error Count")
        $oDict.Add(200,"Write Error Rate")
        $oDict.Add(201,"Soft Read Error Rate")
        $oDict.Add(202,"Address Mark Errors Frequency")
        $oDict.Add(203,"ECC errors (Maxtor: ECC Errors)")
EndFunc

;This is COM error handler
Func MyErrFunc()
  $HexNumber=hex($oMyError.number,8)
  Msgbox(0,"COM Error Test","We intercepted a COM Error !"       & @CRLF  & @CRLF & _
                         "err.description is: "    & @TAB & $oMyError.description    & @CRLF & _
                         "err.windescription:"     & @TAB & $oMyError.windescription & @CRLF & _
                         "err.number is: "         & @TAB & $HexNumber              & @CRLF & _
                         "err.lastdllerror is: "   & @TAB & $oMyError.lastdllerror   & @CRLF & _
                         "err.scriptline is: "     & @TAB & $oMyError.scriptline     & @CRLF & _
                         "err.source is: "         & @TAB & $oMyError.source         & @CRLF & _
                         "err.helpfile is: "       & @TAB & $oMyError.helpfile       & @CRLF & _
                         "err.helpcontext is: "    & @TAB & $oMyError.helpcontext _
                        )
  SetError(1)  ; to check for after this function returns
Endfunc

评分

参与人数 1金钱 +30 贡献 +2 收起 理由
afan + 30 + 2

查看全部评分

发表于 2010-4-8 09:38:11 | 显示全部楼层
楼上好强大
发表于 2010-4-13 11:46:15 | 显示全部楼层
回复 13# rikthhpgf2005


    牛X
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-20 17:27 , Processed in 0.085541 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表