1 (изменено: the_grin, 2012-04-05 17:25:23)

Тема: AHK: Получение информации о диске

Стандартная функция DriveGet не удовлетворяет потребности. В часности интересует номер у-ва вида \\.\phisicalDrive2
Пробовал и через WMI и API но получается слишком много кода и выходных не нужных переменных для такой маленькой функции. Может существует более элегантный способ?

2 (изменено: creature.ws, 2012-04-05 18:00:29)

Re: AHK: Получение информации о диске

for Drive in ComObjGet("winmgmts:").ExecQuery("SELECT Name, FirmwareRevision, SerialNumber, Signature FROM Win32_DiskDrive")
    o .=    Drive.Name . "`n"
          . Drive.FirmwareRevision . "`n"
          . Drive.SerialNumber . "`n"
          . Drive.Signature . "`n`n"
MsgBox, % Clipboard := o

Win32_DiskDrive
Пример внизу

Только не говорите, что выше — много кода

3

Re: AHK: Получение информации о диске

В контексте «маленькой функции»:

GetPDriveSerial(needleName) {
    For Drive in ComObjGet("winmgmts:").ExecQuery("SELECT Name, SerialNumber FROM Win32_DiskDrive")
        If Drive.Name = needleName
            return Drive.SerialNumber
}
MsgBox % GetPDriveSerial("\\.\PHYSICALDRIVE0")

Сделать проще не вышло, уместен был бы вариант «в одну строку», надеюсь кто-то заинтересуется.

4 (изменено: the_grin, 2012-04-06 19:27:47)

Re: AHK: Получение информации о диске

Я видно не так выразился, требуется например по букве диска определить его номер.
Типа входная переменная I:\  выходная \\.\phisicalDrive2
И обратный: входная- phisicalDrive2, выходная I:,H:
Хотя примеры несколько развеяли туман;)

5

Re: AHK: Получение информации о диске

Плагиат конечно но сам я не селен в dllcall понял только 50% написаного))


var:=GetDeviceID("I:")
 MsgBox %var%

GetDeviceID(Disk_Lit)
{
Drv := "\\.\"Disk_lit
hVol := DllCall( "CreateFile", Str,Drv, UInt,0xC0000000, UInt,0x3, UInt,0, UInt,0x3 , UInt,0x0, UInt,0 )
VarSetCapacity( VDE,1024,0 ) 
If DllCall( "DeviceIoControl", UInt,hVol, UInt,0x560000, UInt,0, UInt,0, UInt,&VDE, UInt,1024, UIntP,BR, UInt,0 )
DllCall("CloseHandle", UInt,hVol )
   return	 "\\.\PhysicalDrive" NumGet( VDE,8 )
 }

Поправки будут?
Как будет работать без прав администратора?

6

Re: AHK: Получение информации о диске

Через WMI можно получить, только не Win32_DiskDrive нужен, а Win32_LogicalDiskToPartition(по-моему это вполне очевидно из названия ).

7 (изменено: VlaDOS, 2012-04-10 09:02:51)

Re: AHK: Получение информации о диске

О_о  а я вот так вот решал данную особенность с DriveGet:

#NoTrayIcon
FileSelectFolder, OKnaid, , 3, Выберите съемный носитель:

if folder =
sleep, 200

DriveGet, serial, serial, %OKnaid%

          MsgBox, 64, Внимание, SN: %serial% 
 ExitApp

Может в чем то и не прав...
хотел сделать чтобы при подключении съемного устройства программа автоматом проверяла S/N. 

Знаю что класс у устройства REMOVABLE, но вместе с съёмником он захватывает диск А:\ B:\ ((

DriveGet, list, list, REMOVABLE

результат выводит как: "ABG" (КАК их разъединить и обработать отдельно?)

8

Re: AHK: Получение информации о диске

loop, parse, list
   MsgBox Drive: %A_LoopField%