Re: elencare i dischi di sistema

grazie ragazzi, siete MITICI!! era proprio quello di cui avevo bisogno,
il
passo successivo sarebbe stato distinguere i dischi removibili da quelli
fissi… non mi resta che fare delle prove :slight_smile:

p.s.
…che cacchio è WMI?
Daniele, dove posso trovare documentazione in merito?

grazie.

On 6/17/07, Fabio P. [email protected] wrote:

grazie ragazzi, siete MITICI!! era proprio quello di cui avevo bisogno, il
passo successivo sarebbe stato distinguere i dischi removibili da quelli
fissi… non mi resta che fare delle prove :slight_smile:

Utilizzando il modulo windows-pr puoi sfruttare la funzione
GetDriveType per ottenere il tipo dell’unità . Espando il primo esempio
che ho fatto giusto per darti più idee su come potresti utilizzare nel
caso questo modulo, poi la sperimentazione è tutta tua :slight_smile:

require ‘windows/volume’
include Windows::Volume

def get_drive_letters
buffer = " " * 1024
length = GetLogicalDriveStrings(buffer.length, buffer)
buffer[0…length].split(0.chr)
end

def get_drive_type(root_path_name)
GetDriveType(root_path_name)
end

def drive_types_hash(drives)
get_drive_letters.inject({}) do |hash, drive|
hash[drive.delete(‘:\’)] = get_drive_type(drive)
hash
end
end

p drive_types_hash(get_drive_letters)
#=> {“A”=>2, “C”=>3, “D”=>3, “E”=>5, “F”=>5, “G”=>2, “H”=>2}

Aprendo lib\windows\volume.rb puoi trovare all’inizio la definizione
delle costanti che rappresentano il tipo di volume, comunque sono:

DRIVE_UNKNOWN = 0
DRIVE_NO_ROOT_DIR = 1
DRIVE_REMOVABLE = 2
DRIVE_FIXED = 3
DRIVE_REMOTE = 4
DRIVE_CDROM = 5
DRIVE_RAMDISK = 6

Se invece intendi usare l’ultimo esempio, quello con WMI, per
recuperare tutti i tipi di unità , come nell’esempio di windows-pr,
ti basta modificare la query in:

SELECT * FROM Win32_LogicalDisk

e poi iterando sul set di risultati controlli il valore di
device.DriveType per risalire al suo tipo. I valori sono gli stessi
delle costanti che hai visto sopra, comunque c’è tutta la
documentazione estesa sulla classe WMI Win32_LogicalDisk all’indirizzo

p.s.
…che cacchio è WMI?
Daniele, dove posso trovare documentazione in merito?

WMI è l’acronimo di Windows Management Instrumentation ed è
un’infrastruttura per la gestione di dati e operazioni in sistemi
Windows attraverso un’interfaccia pesantemente semplificata (più
astratta e generica), torna molto utile per automatizzare operazioni
e/o task di amministrazione oppure per ricavare eventi o informazioni
di sistema, il tutto da computer locale o da postazioni remote.

Sempre su MSDN trovi tutte le informazioni che vuoi su WMI partendo da
qui: Windows Management Instrumentation - Win32 apps | Microsoft Learn

On 6/17/07, Daniele A. [email protected] wrote:

err, ovviamente:

def drive_types_hash(drives)
get_drive_letters.inject({}) do |hash, drive|

in realtà dovrebbe essere:

def drive_types_hash(drives)
drives.inject({}) do |hash, drive|

:smiley: