DyadyaGenya
WMI это объект, которому применяются методы (как в JavaScript), а WinAPI это функция с параметрами, иногда не понятными, так как имеет собственную типизацию. У меня в ChkDskGui оказывается 3 раза вызывается функция DeviceIoControl. Можно оттуда брать или искать на офсайте, проверил кучу вариантов даёт в результатах поиска, так что это не что-то недоступное. Ведь ранее ChkDskGui была написана на AutoIt3, уже понятно что примеры были. Вот я использовал
этот пример для возврата номер диска для ChkDskGui. Там можно флаги менять чтобы запросить другие параметры, хотя не всегда так просто, фактически надо второй параметр
dwIoControlCode определить, чтобы получить какую либо инфу, а результатом будет указатель на структуру в 5-ом параметре - lpOutBuffer. И вот эта структура может быть сложной, может даже самому придётся делать. То есть надо найти какие флаги поддерживаются и какие структуры возвращается для этих флагов.
Вот как искать с подсветкой в примере с температурой 12 вызовов (
скриншот), смотри изучай, сопоставляй с примером на AutoIt3.
Ещё
пример (LEGACY/UEFI, MBR/GPT)
ChkDskGui с
upload.ee, там посмотри в исходнике файл RAW.pb , константа IOCTL_DISK_GET_DRIVE_GEOMETRY_EX возвращает геометрию диска в полях структуры, а у меня используется для возвращения размера RAW дисков, то есть не форматированных. Google пишет:
Извлекает расширенную информацию о геометрии физического диска: тип, количество цилиндров, дорожки на цилиндр, сектора на дорожку, байты на сектор и размер.
Сделал
поиск по файлам au3 в папке \AutoIt\Include\ выдал 18 результатов DeviceIoControl, в том числе геометрия диска. Так что у вас тонна примеров для использования.
Вот команды из кода температуры, можно копировать константу и гуглить её назначение и решать, пригодится ли она для вывода какой либо информации.
Result = DeviceIoControl_(hDrive, #IOCTL_DISK_GET_PARTITION_INFO, #Null, 0, @bb, SizeOf(PARTITION_INFORMATION), @BytesRet, 0)
DeviceIoControl_(hdh, #DFP_SEND_DRIVE_COMMAND, @bin, SizeOf(SENDCMDINPARAMS), @bout, SizeOf(SENDCMDOUTPARAMS),
DeviceIoControl_(hdh, #IOCTL_SCSI_MINIPORT, @buffer(), SizeOf(SRB_IO_CONTROL) + SizeOf(SENDCMDINPARAMS) - 1, @buffer(),
status = DeviceIoControl_(hdh, $4d004, @pswb, SizeOf(t_SPTD), @pswb, Length, @returned, @OL)
ReadAttributesCmd = DeviceIoControl_(hdh, #DFP_RECEIVE_DRIVE_DATA, @bin, SizeOf(SENDCMDINPARAMS), @bArrOut(), 528, @cbBytesReturned, 0)
bRet = DeviceIoControl_(hdh, #IOCTL_SCSI_MINIPORT, @buffer(), SizeOf(SRB_IO_CONTROL) + SizeOf(SENDCMDINPARAMS) - 1, @buffer(),
ReadAttributesCmd = DeviceIoControl_(hdh, #DFP_RECEIVE_DRIVE_DATA, @bin, SizeOf(SENDCMDINPARAMS), @bArrOut(), 528, @cbBytesReturned, 0)
bRet = DeviceIoControl_(hdh, #IOCTL_SCSI_MINIPORT, @buffer(), SizeOf(SRB_IO_CONTROL) + SizeOf(SENDCMDINPARAMS) - 1, @buffer(),
Result = DeviceIoControl_(hdh, #DFP_RECEIVE_DRIVE_DATA, @bin, SizeOf(SENDCMDINPARAMS), @bout(), 528, @dummy, 0)
Result = DeviceIoControl_(hdh, #IOCTL_SCSI_MINIPORT, @buffer(), SizeOf(SRB_IO_CONTROL) + SizeOf(SENDCMDINPARAMS) - 1, @buffer(),
i = DeviceIoControl_(hdh, #IOCTL_DISK_GET_DRIVE_LAYOUT, #Null, 0, @aa, SizeOf(DRIVE_LAYOUT_INFORMATION), @BytesRet.l, 0)
Result = DeviceIoControl_(hdh, $2D1400, udtQuery, SizeOf(udtQuery), @udtOut, SizeOf(udtOut), @dwOutBytes, 0)