Автор Тема: Количество дисков SSD/HDD  (Прочитано 1957 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Scampy [?]

  • Новичок
  • *
  • Сообщений: 42
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.12.0
Количество дисков SSD/HDD
« Создано: Декабрь 02, 2016, 21:47:43 »
Всем доброго времени суток!
Есть стандартный скрипт по определению SSD/HDD дисков в системе:
Код: AutoIt [Выделить]
#include <AutoItConstants.au3>
#include <MsgBoxConstants.au3>

$typedisk = DriveGetType(0, 2)
$typedisk1 = DriveGetType(1, 2)
$typedisk2 = DriveGetType(2, 2)
If $typedisk = "" Then typedisk = "HDD"
If $typedisk1 = "" Then $typedisk1 = "HDD"
If $typedisk2 = "" Then $typedisk2 = "HDD"
MsgBox(4096, "Диски", $typedisk & @CRLF & $typedisk1 & @CRLF & $typedisk2)
 

Вопрос в чем... сколько бы "$typedisk" не добавлялось, все равно идет их определение и соответственно результат. Как сделать, чтоб определялось только реальное число дисков?

Русское сообщество AutoIt

Количество дисков SSD/HDD
« Отправлен: Декабрь 02, 2016, 21:47:43 »

Оффлайн Alofa [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1108
  • Репутация: 155
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Количество дисков SSD/HDD
« Ответ #1, Отправлен: Декабрь 02, 2016, 22:27:52 »
... Есть стандартный скрипт ...
А где такой взяли?

Код: AutoIt [Выделить]
#include <Array.au3>

Local $aArray = DriveGetDrive('FIXED')

For $i = 1 To 3
    _ArrayColInsert($aArray, $i)
    For $j = 1 To $aArray[0][0]
        $aArray[$j][$i] = DriveGetType($aArray[$j][0], $i)
    Next
Next
_ArrayDisplay($aArray)
 


Оффлайн Scampy [?]

  • Новичок
  • *
  • Сообщений: 42

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Количество дисков SSD/HDD
« Ответ #2, Отправлен: Декабрь 02, 2016, 22:47:42 »
... Есть стандартный скрипт ...
А где такой взяли?

Код: AutoIt [Выделить]
#include <Array.au3>

Local $aArray = DriveGetDrive('FIXED')

For $i = 1 To 3
    _ArrayColInsert($aArray, $i)
    For $j = 1 To $aArray[0][0]
        $aArray[$j][$i] = DriveGetType($aArray[$j][0], $i)
    Next
Next
_ArrayDisplay($aArray)
 

Не совсем правильно выразился... команда имелась ввиду, а не весь код. В вашем примере отображаются все диски всех дисков... а нужно только диски как девайс.

Оффлайн Alofa [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1108
  • Репутация: 155
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Количество дисков SSD/HDD
« Ответ #3, Отправлен: Декабрь 03, 2016, 01:06:24 »
... по определению SSD/HDD дисков в системе:
...
... Как сделать, чтоб определялось только реальное число дисков?
В Операционной системе или на компьютере?

... Не совсем правильно выразился...
Это очевидно.

... команда имелась ввиду, а не весь код.
Что вы называете командой?
Если нижеследующее для вас "команда", тогда смотрите ее описание и пример в Справке.
Код: AutoIt [Выделить]

Русское сообщество AutoIt

Re: Количество дисков SSD/HDD
« Ответ #3 Отправлен: Декабрь 03, 2016, 01:06:24 »

Оффлайн Scampy [?]

  • Новичок
  • *
  • Сообщений: 42

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Количество дисков SSD/HDD
« Ответ #4, Отправлен: Декабрь 03, 2016, 13:07:03 »
В Операционной системе или на компьютере?
В операционной системе. Реально работающих в данный момент. За ссылку спасибо.
А что подразумевалось в фразе "на компьютере"?

Оффлайн СН3СН2ОН [?]

  • Новичок
  • *
  • Сообщений: 76
  • Репутация: 10
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.2.8.1
Re: Количество дисков SSD/HDD
« Ответ #5, Отправлен: Декабрь 03, 2016, 15:24:43 »
В операционной системе. Реально работающих в данный момент. За ссылку спасибо.
[/quote]
Справку не читаете?
Вот пример из неё:
(нажмите для показа/скрытия)
А дальше, используя код Alofa и функцию DriveGetType (Возвращает тип устройства: "Unknown", "Removable", "Fixed", "Network", "CDROM", "RAMDisk"), ищем тип дисков.
Япрофиэтосерьезно

Оффлайн Alofa [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1108
  • Репутация: 155
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Количество дисков SSD/HDD
« Ответ #6, Отправлен: Декабрь 03, 2016, 22:11:27 »
... А что подразумевалось в фразе "на компьютере"?
А что подразумевалось во фразе?
... Реально работающих в данный момент.
Я так подразумеваю вы хотите вычислить физические диски, а не логические.
Что такое физический диск и что такое логический диск?

Оффлайн Scampy [?]

  • Новичок
  • *
  • Сообщений: 42

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Количество дисков SSD/HDD
« Ответ #7, Отправлен: Декабрь 04, 2016, 17:21:26 »
Я так подразумеваю вы хотите вычислить физические диски, а не логические.
Да, именно физические диски. Железо. Недопоняли мы друг друга. Хотел написать понятней, а вышло наоборот. Извиняюсь.

Русское сообщество AutoIt

Re: Количество дисков SSD/HDD
« Ответ #7 Отправлен: Декабрь 04, 2016, 17:21:26 »

Оффлайн Aleksandr Prilutskiy [?]

  • Новичок
  • *
  • Сообщений: 28
  • Репутация: 9
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Количество дисков SSD/HDD
« Ответ #8, Отправлен: Январь 19, 2017, 10:13:16 »
Немного сложновато, но я делаю всегда именно так:
Код: AutoIt [Выделить]
$ObjService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
$ObjItems = $ObjService.ExecQuery("SELECT * FROM Win32_DiskDrive", "WQL", 0x30)
$n = 0
If IsObj($ObjItems) Then
 Local $ObjItem, $i = 0
 For $ObjItem In $ObjItems
  ConsoleWrite($ObjItem.Model & @CRLF)
  $n += 1
 Next
EndIf
ConsoleWrite("Всего HDD: " & $n & @CRLF)

- работает 100% + в $ObjItem можно получить  кучу полезной (и бесполезной) информации.
Перечень свойств объекта можно смотреть тут: https://msdn.microsoft.com/en-us/library/aa394132(v=vs.85).aspx

Оффлайн Scampy [?]

  • Новичок
  • *
  • Сообщений: 42

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Количество дисков SSD/HDD
« Ответ #9, Отправлен: Январь 21, 2017, 01:13:53 »
Немного сложновато, но я делаю всегда именно так
А если в компе внутренний картридер? Он ведь в Вашем скрипте тоже определяется как HDD диск.

Вообщем в итоге у меня получилось как то так...
Код: AutoIt [Выделить]
#include <WinAPIFiles.au3>

Local $aData, $aDrive = DriveGetDrive('FIXED')
Local $aList[10]

For $i = 0 To UBound($aDrive) - 1
    $aList[$i] = ''
Next
If IsArray($aDrive) Then
    For $i = 1 To $aDrive[0]
        $aData = _WinAPI_GetDriveNumber($aDrive[$i])
        If IsArray($aData) Then
            $aList[$aData[1]] &= StringUpper($aDrive[$i]) & ' '
        EndIf
    Next
EndIf
For $i = 0 To UBound($aDrive) - 1
   If $aList[$i] Then
      $ssd = DriveGetType($i, $DT_SSDSTATUS)
      If $ssd = "" Then $ssd = "HDD"
      ConsoleWrite("Диск " & $i & @TAB & $ssd & @CRLF)
    EndIf
 Next
 


Русское сообщество AutoIt

Re: Количество дисков SSD/HDD
« Ответ #9 Отправлен: Январь 21, 2017, 01:13:53 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
13 Ответов
9897 Просмотров
Последний ответ Декабрь 10, 2009, 09:11:23
от Heler
2 Ответов
5572 Просмотров
Последний ответ Февраль 26, 2010, 19:24:04
от CreatoR
5 Ответов
7010 Просмотров
Последний ответ Август 20, 2010, 15:26:06
от amel27
1 Ответов
1988 Просмотров
Последний ответ Февраль 15, 2012, 23:09:33
от AZJIO
9 Ответов
6385 Просмотров
Последний ответ Март 03, 2012, 19:14:52
от vanekzver
4 Ответов
2314 Просмотров
Последний ответ Январь 14, 2013, 17:15:38
от Pavci
1 Ответов
3350 Просмотров
Последний ответ Апрель 09, 2014, 06:54:55
от kalugin66
33 Ответов
9318 Просмотров
Последний ответ Январь 26, 2015, 09:53:01
от Aleksandr Prilutskiy
4 Ответов
1826 Просмотров
Последний ответ Январь 12, 2015, 18:48:28
от ZeVSalt
2 Ответов
1084 Просмотров
Последний ответ Март 13, 2015, 14:51:34
от Vlasssov