2009-09-30 11 views
1

Je suis en train de programmer en Python avec un wrapper de la DLL kernel32, donc je peux utiliser toutes les fonctions de cette DLL, comme GetLogicalDrives(), par exemple. J'essaie d'obtenir l'information des disques physiques, même s'ils ne sont pas montés. J'ai vu une question semblable à ceci, mais j'ai besoin des informations des disques non montés. Toutes les méthodes que j'ai vues ont besoin d'un répertoire ou d'un fichier dans l'appareil, mais s'il n'est pas monté, je ne peux pas en avoir un, alors la question est:comment obtenir des lecteurs physiques dans Windows

Y at-il une méthode qui peut me fournir une liste des lecteurs physiques dans le système, même s'ils ne sont pas montés?

Je dois dire que l'utilisation du registre de Windows, j'ai obtenu le nombre de disques physiques « HKEY_LOCAL_MACHINE \ Hardware \ Devicemap \ Scsi \ Scsi Port x », car à l'intérieur de cette clé, vous pouvez voir le nombre de lecteurs, y compris les lecteurs de CD-ROM ou les lecteurs de disquettes. Mais j'ai besoin de la taille des périphériques non montés aussi, donc ...

Répondre

1

FindFirstVolume et FindNextVolume peut être ce dont vous avez besoin.

MSDN FindFirstVolume page

Il y a un exemple qui recherche des volumes et la liste de tous les chemins pour chaque volume, et à première vue, il semble permettre la possibilité qu'il n'y a pas de chemin pour certains volumes. Cela dit, je n'ai jamais utilisé ça.

+0

Merci, mais je l'ai déjà utilisé ces méthodes, et ils passent par les volumes, au lieu des disques durs. En outre, j'appelle la méthode QueryDosDeviceW avec le nom de volume retourné par FindNextVolume et j'obtiens ce qui suit: Nom de volume \\? \ Volume {3118a200-a4ae-11 ...} \ Disque physique: \ Device \ HarddiskVolume1 nom du volume \\ \ Volume {3118a202-a4ae-11 ...} \ disque physique:? \ Device \ HarddiskVolume2 nom du volume \\ \ Volume {4f569545-A4AF-11 ...} \ disque physique : \ Device \ CdRom0 Nom du volume \\?\ Volume {4f569544-a4af-11 ...} \ Disque physique: \ Device \ Floppy0 Le disque dur non monté n'apparaît donc pas. –

+0

Je pense que je comprends. Les volumes sont des partitions, mais vous voulez les disques réels, même s'il n'y a pas encore de partitions. J'ai fait quelques recherches par curiosité, mais tout ce que j'ai trouvé, ce sont des fonctions DDK comme SetupDiEnumDeviceInfo. Cela ressemble à une impasse, mais OTOH, diskpart.exe semble lier à cette fonction. – Steve314

3

Utilisez le module wmi de Tim Golden. Voici l'entrée cookbook:

import wmi 

w = wmi.WMI() 
for drive in w.Win32_LogicalDisk(): 
    print drive.Caption, drive.Size, drive.FreeSpace 

impressions

 
C: 99928924160 14214135808 
D: None None 
E: 499983122432 3380903936 
S: 737329123328 362274299904 
T: 737329123328 9654988800 

Toutefois, notez qu'aucune information est disponible pour mon lecteur D: (lecteur de DVD, non monté). Je ne pense pas que vous pouvez obtenir des informations de taille pour les supports amovibles qui ne sont pas montés.

+1

Je crois que Roman posait des questions sur les disques physiques plutôt que sur les disques logiques. –

+0

essayez d'utiliser ceci: pour h dans w.query ('select * from Win32_DiskDrive'): – Simon

1

Aussi vous pouvez essayer le module win32 pour Python.

0

Que diriez-vous de Win32_DiskDrive wmi class?

c = wmi.WMI() 

dd = c.Win32_DiskDrive()[0] 

print.dd 

En savoir plus sur Win32_DiskDrive on the msdn

Questions connexes