DyadyaGenya
Знающий
- Сообщения
- 300
- Репутация
- 10
Доброго времени суток. Есть два рабочих варианта заполнения массива.
Вариант 1 (сокращенный)
Вариант 2
В обоих вариантах массив $Smart Заплняется полностью, вроде без пропусков.
Когда пробую замменить прописанный в ручном режиме массив $k, тогда в массив $Smart попадает всего несколько значений, ато и один (зависит от компа и операционки)
Вариант 3 (заменен прописанный в ручную массив $k)
Причем проверка в "итоговом" варианте (показ массива $k) показывает, что все значения предварительно занесены.
Вариант 1 (сокращенный)
Код:
[URL='https://autoit-script.ru/docs/keywords/include.htm']#include[/URL] <Constants.au3>
[URL='https://autoit-script.ru/docs/keywords/include.htm']#include[/URL] <Array.au3>
[URL='https://autoit-script.ru/docs/keywords/dim.htm']Const[/URL] $wbemFlagReturnImmediately = 0x10
[URL='https://autoit-script.ru/docs/keywords/dim.htm']Const[/URL] $wbemFlagForwardOnly = 0x20
[URL='https://autoit-script.ru/docs/keywords/dim.htm']Global[/URL] $Smart[0][8]
[URL='https://autoit-script.ru/docs/keywords/dim.htm']Global[/URL] $sTemp, $sTemp231, $sTemp1
[URL='https://autoit-script.ru/docs/keywords/dim.htm']Local[/URL] $sPark, $sP, $sT
[URL='https://autoit-script.ru/docs/keywords/dim.htm']Local[/URL] $objWMIService = [URL='https://autoit-script.ru/docs/functions/objget.htm']ObjGet[/URL]("winmgmts:\\" & [URL='https://autoit-script.ru/docs/macros.htm']@ComputerName[/URL] & "\root\WMI")
[URL='https://autoit-script.ru/docs/keywords/dim.htm']Local[/URL] $colItems = $objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_ATAPISmartData", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
[URL='https://autoit-script.ru/docs/keywords/dim.htm']Local[/URL] $iCnt = 1, $strReserved, $strVendorSpecific
[URL='https://autoit-script.ru/docs/keywords/for.htm']For[/URL] $Item [URL='https://autoit-script.ru/docs/keywords/in.htm']In[/URL] $colItems
$strReserved = $Item.Reserved
$strVendorSpecific = $Item.VendorSpecific
$iCnt += 1
[URL='https://autoit-script.ru/docs/keywords/for.htm']Next
For[/URL] $i = 2 [URL='https://autoit-script.ru/docs/keywords/for.htm']To[/URL] [URL='https://autoit-script.ru/docs/functions/ubound.htm']UBound[/URL]($strVendorSpecific) - 1 [URL='https://autoit-script.ru/docs/keywords/for.htm']Step[/URL] 12
[URL='https://autoit-script.ru/docs/keywords/if.htm']If[/URL] $strVendorSpecific[$i] = 0 [URL='https://autoit-script.ru/docs/keywords/if.htm']Then[/URL] [URL='https://autoit-script.ru/docs/keywords/continueloop.htm']ContinueLoop[/URL]
[URL='https://autoit-script.ru/docs/keywords/if.htm']If[/URL] $strVendorSpecific[$i] = 1 [URL='https://autoit-script.ru/docs/keywords/if.htm']Then[/URL] $sPark = $strVendorSpecific[$i] & '|' & $strVendorSpecific[$i + 1] & '|' & $strVendorSpecific[$i + 2] & '|' & $strVendorSpecific[$i + 3] & '|' & $strVendorSpecific[$i + 4] & '|' & $strVendorSpecific[$i + 5] & '|' & $strVendorSpecific[$i + 6]
[URL='https://autoit-script.ru/docs/keywords/if.htm']If[/URL] $strVendorSpecific[$i] = 2 [URL='https://autoit-script.ru/docs/keywords/if.htm']Then[/URL] $sP = $strVendorSpecific[$i] & '|' & $strVendorSpecific[$i + 1] & '|' & $strVendorSpecific[$i + 2] & '|' & $strVendorSpecific[$i + 3] & '|' & $strVendorSpecific[$i + 4] & '|' & $strVendorSpecific[$i + 5] & '|' & $strVendorSpecific[$i + 6]
[URL='https://autoit-script.ru/docs/keywords/if.htm']If[/URL] $strVendorSpecific[$i] = 3 [URL='https://autoit-script.ru/docs/keywords/if.htm']Then[/URL] $sT = $strVendorSpecific[$i] & '|' & $strVendorSpecific[$i + 1] & '|' & $strVendorSpecific[$i + 2] & '|' & $strVendorSpecific[$i + 3] & '|' & $strVendorSpecific[$i + 4] & '|' & $strVendorSpecific[$i + 5] & '|' & $strVendorSpecific[$i + 6]
[URL='https://autoit-script.ru/docs/keywords/if.htm']If[/URL] $strVendorSpecific[$i] = 194 [URL='https://autoit-script.ru/docs/keywords/if.htm']Then[/URL] $sTemp = $strVendorSpecific[$i] & '|' & $strVendorSpecific[$i + 1] & '|' & $strVendorSpecific[$i + 2] & '|' & $strVendorSpecific[$i + 3] & '|' & $strVendorSpecific[$i + 4] & '|' & $strVendorSpecific[$i + 5] & '|' & $strVendorSpecific[$i + 6]
[URL='https://autoit-script.ru/docs/keywords/if.htm']If[/URL] $strVendorSpecific[$i] = 231 [URL='https://autoit-script.ru/docs/keywords/if.htm']Then[/URL] $sTemp231 = $strVendorSpecific[$i] & '|' & $strVendorSpecific[$i + 1] & '|' & $strVendorSpecific[$i + 2] & '|' & $strVendorSpecific[$i + 3] & '|' & $strVendorSpecific[$i + 4] & '|' & $strVendorSpecific[$i + 5] & '|' & $strVendorSpecific[$i + 6]
[URL='https://autoit-script.ru/docs/keywords/for.htm']Next[/URL]
[URL='https://autoit-script.ru/docs/keywords/if.htm']If[/URL] [URL='https://autoit-script.ru/docs/functions/stringstripws.htm']StringStripWS[/URL]($sPark, 8) <> '' [URL='https://autoit-script.ru/docs/keywords/if.htm']Then[/URL] [URL='https://autoit-script.ru/docs/libfunctions/_arrayadd.htm']_ArrayAdd[/URL]($Smart, $sPark)
[URL='https://autoit-script.ru/docs/keywords/if.htm']If[/URL] [URL='https://autoit-script.ru/docs/functions/stringstripws.htm']StringStripWS[/URL]($sP, 8) <> '' [URL='https://autoit-script.ru/docs/keywords/if.htm']Then[/URL] [URL='https://autoit-script.ru/docs/libfunctions/_arrayadd.htm']_ArrayAdd[/URL]($Smart, $sP)
[URL='https://autoit-script.ru/docs/keywords/if.htm']If[/URL] [URL='https://autoit-script.ru/docs/functions/stringstripws.htm']StringStripWS[/URL]($sT, 8) <> '' [URL='https://autoit-script.ru/docs/keywords/if.htm']Then[/URL] [URL='https://autoit-script.ru/docs/libfunctions/_arrayadd.htm']_ArrayAdd[/URL]($Smart, $sT)
[URL='https://autoit-script.ru/docs/keywords/if.htm']If[/URL] [URL='https://autoit-script.ru/docs/functions/stringstripws.htm']StringStripWS[/URL]($sTemp, 8) <> '' [URL='https://autoit-script.ru/docs/keywords/if.htm']Then[/URL] [URL='https://autoit-script.ru/docs/libfunctions/_arrayadd.htm']_ArrayAdd[/URL]($Smart, $sTemp)
[URL='https://autoit-script.ru/docs/keywords/if.htm']If[/URL] [URL='https://autoit-script.ru/docs/functions/stringstripws.htm']StringStripWS[/URL]($sTemp231, 8) <> '' [URL='https://autoit-script.ru/docs/keywords/if.htm']Then[/URL] [URL='https://autoit-script.ru/docs/libfunctions/_arrayadd.htm']_ArrayAdd[/URL]($Smart, $sTemp231) ; Это обычно пустое значение для проверки
[URL='https://autoit-script.ru/docs/libfunctions/_arraydisplay.htm']_ArrayDisplay[/URL]($Smart, 'Smart', [URL='https://autoit-script.ru/docs/keywords/default.htm']Default[/URL], '', [URL='https://autoit-script.ru/docs/keywords/default.htm']Default[/URL], "ID|Attribute|Type|Flag|Threshold|Value|Worst|Status")
Код:
#include <Constants.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUITab.au3>
#include <GUIListView.au3>
#include <GUIImageList.au3>
#include <String.au3>
#include <Array.au3>
Const $wbemFlagReturnImmediately = 0x10
Const $wbemFlagForwardOnly = 0x20
Global $Index[0], $Smart[0][8]
Global $sTemp, $sTemp231, $sTemp1, $i, $j, $sPark, $Item[0]
Global $strVendorSpecific[0], $strVendorSpecificA[0], $k[0]
$objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\WMI")
$colItems = $objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_ATAPISmartData", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
$iCnt = 1
For $Item In $colItems
$strVendorSpecific = $Item.VendorSpecific
_ArrayDisplay($strVendorSpecific,"Спецификация")
$iCnt +=1
Next
Local $k[25]
$k[0]=1
$k[1]=2
$k[2]=3
$k[3]=4
$k[4]=5
$k[5]=6
$k[6]=7
$k[7]=8
$k[8]=9
$k[9]=10
$k[10]=11
$k[11]=12
$k[12]=13
$k[13]=183
$k[14]=184
$k[15]=187
$k[16]=188
$k[17]=189
$k[18]=190
$k[19]=191
$k[20]=192
$k[21]=193
$k[22]=194
_ArrayDisplay($k, "проверочный массив К")
For $j = 0 To UBound($k)-1
For $i = 2 to UBound($strVendorSpecific) - 1 Step 12
Select
Case $strVendorSpecific[$i] = $k[$j]
$sPark = $strVendorSpecific[$i] & '|' & $strVendorSpecific[$i + 1] & '|' & $strVendorSpecific[$i + 2] & '|' & $strVendorSpecific[$i + 3] & '|' & $strVendorSpecific[$i + 4] & '|' & $strVendorSpecific[$i + 5] & '|' & $strVendorSpecific[$i + 6]
If StringStripWS($sPark, 8) <> 0 Then _ArrayAdd($Smart, $sPark)
Case Else
$sPark=''
EndSelect
Next
Next
_ArrayDisplay($Smart, 'Smart', Default, '', Default, "ID|Attribute|Type|Flag|Threshold|Значение|Worst|Status")
Когда пробую замменить прописанный в ручном режиме массив $k, тогда в массив $Smart попадает всего несколько значений, ато и один (зависит от компа и операционки)
Вариант 3 (заменен прописанный в ручную массив $k)
Код:
For $z = 2 to UBound($strVendorSpecific) - 1 Step 12
_ArrayAdd($k, $z)
Next
Причем проверка в "итоговом" варианте (показ массива $k) показывает, что все значения предварительно занесены.