Affichage des disques à la façon du gestionnaire de Windows (avec les incertitudes possibles liées à l'analyse WMI )
Le plus tordu c'est l'affichage graphique des partitions dans les labels
La gui se dimensionne/proportionne toute seule en fonction du nombre de disques/partitions
@matwachich
Tu remarqueras la présentation soignée et très pro de la gui (si elle accepte de s'afficher)
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <Array.au3>
#include <ListviewConstants.au3>
SplashTextOn ("", "Loading...", 180, 60, -1, -1, 49)
Global $var = DriveGetDrive("FIXED")
$myinfos = _GetZeDriveInfos()
;_arraydisplay($myinfos)
$lines = 0
For $i = 1 to $var[0]
If StringRight($myinfos[$i-1][5], 1) = 0 Then $lines += 1
Next
$labelW = 610
$labelYpos = 45+(14*$var[0])
$Main = GuiCreate("Disques", $labelW+260, $labelYpos+(40*$lines))
$listview = GUICtrlCreateListView("Volume|Nom|Taille (Go)|Disponible (Go)|Occupé (Go)|" & _
"Plein à|Libre (Go)|Disque physique|ID", 10, 5, $labelW+240, $labelYpos-15)
For $i = 0 to $var[0]-1
$percentocc = Round(($myinfos[$i][2]-$myinfos[$i][3])*100/$myinfos[$i][2], 1)
GUICtrlCreateListViewItem(StringUpper($myinfos[$i][0]) &"|"& $myinfos[$i][6] &"|"& _
$myinfos[$i][4] &"|"& $myinfos[$i][2] &"|"& $myinfos[$i][2]-$myinfos[$i][3] &"|"& _
$percentocc &" %" &"|"& $myinfos[$i][3] &"|"& $myinfos[$i][1] &"|"& $myinfos[$i][5], $listview)
Next
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 0, 60)
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 1, 110)
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 2, 70)
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 3, 90)
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 4, 80)
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 5, 70)
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 6, 70)
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 7, 170)
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 8, 120)
For $i = 1 to $var[0]
$aiResult = _ArrayFindAll($myinfos, $myinfos[$i-1][1], 0, 0, 0, 0, 1)
$nbpart = UBound($aiResult)
$top = $labelYpos+($aiResult[0]*40)
If $nbpart = 1 Then
GUICtrlCreateLabel("", 10, $top, $labelW, 30)
GUICtrlSetBkColor(-1, 0xFFFFFF)
$spacetotal = DriveSpaceTotal($var[$i])
$plein = $spacetotal - DriveSpaceFree($var[$i])
$larg = Round ($plein * $labelW / $spacetotal)
GUICtrlCreateLabel(" " & StringUpper($var[$i]), 10, $top, $larg, 30)
GUICtrlSetBkColor(-1, 0x0000FF)
GUICtrlSetColor(-1, 0xffffff)
GUICtrlSetFont(-1, 16, 400, 0, "Tahoma")
$percent = Round ($plein * 100 / $spacetotal)
GUICtrlCreateLabel($percent & " %", 50, $top+5, 40, 20)
GUICtrlSetBkColor(-1, 0x0000FF)
GUICtrlSetColor(-1, 0xffffff)
GUICtrlSetFont(-1, 10, 600, 0, "Tahoma")
GUICtrlCreateLabel($myinfos[$i-1][1], $labelW+20, $top+5, 160, 20)
GUICtrlSetFont(-1, 10, 600, 0, "Tahoma")
GUICtrlCreateLabel($myinfos[$i-1][4] & " Go", $labelW+190, $top+5, 60, 20, 0x2)
GUICtrlSetFont(-1, 10, 600, 0, "Tahoma")
Else
Dim $part[$nbpart][4]
$spacetotal = 0
$l_pos = 0
$size = 0
For $k = 0 To $nbpart-1
$part[$k][0] = $myinfos[$aiResult[$k]][2] ; total
$part[$k][1] = $myinfos[$aiResult[$k]][3] ; free
$part[$k][2] = $myinfos[$aiResult[$k]][1]
$part[$k][3] = $myinfos[$aiResult[$k]][4]
$spacetotal += $part[$k][0]
$size += $myinfos[$aiResult[$k]][4]
Next
For $k = 0 To $nbpart-1
$largpart = $labelW*$part[$k][0]/$spacetotal ; pour la label
GUICtrlCreateLabel("", 10+$l_pos, $top, $largpart, 30)
GUICtrlSetBkColor(-1, 0xFFFFFF)
$plein = $part[$k][0] - $part[$k][1]
$largplein = Round ($plein * $largpart / $part[$k][0])
GUICtrlCreateLabel(" " & StringUpper($var[$aiResult[$k]+1]), 10+$l_pos, $top, $largplein, 30)
GUICtrlSetBkColor(-1, 0x0000FF)
GUICtrlSetColor(-1, 0xffffff)
GUICtrlSetFont(-1, 16, 400, 0, "Tahoma")
$percent = Round ($plein * 100 / $part[$k][0])
GUICtrlCreateLabel($percent & " %", $l_pos+50, $top+5, 40, 20)
GUICtrlSetBkColor(-1, 0x0000FF)
GUICtrlSetColor(-1, 0xffffff)
GUICtrlSetFont(-1, 10, 600, 0, "Tahoma")
GUICtrlCreateLabel($part[$k][2], $labelW+20, $top+5, 160, 20)
GUICtrlSetFont(-1, 10, 600, 0, "Tahoma")
GUICtrlCreateLabel($size & " Go", $labelW+190, $top+5, 60, 20, 0x2)
GUICtrlSetFont(-1, 10, 600, 0, "Tahoma")
$l_pos += $largpart+2
Next
EndIf
If StringRight($myinfos[$i-1][5], 1)>0 Then $labelYpos -= 40
Next
GUISetState()
SplashOff()
While 1
$nMsg = GUIGetMsg()
Select
Case $nMsg = $GUI_EVENT_CLOSE
Exit
EndSelect
WEnd
Func _GetZeDriveInfos()
Dim $specifs[$var[0]][7]
For $i = 1 to $var[0]
Dim $Services = ObjGet('winmgmts:\\.\root\cimv2')
Dim $DiskDrives = $Services.ExecQuery("Select Caption, DeviceID From Win32_DiskDrive")
For $DiskDrive In $DiskDrives
Dim $DiskPartitions = $Services.ExecQuery("Associators of {Win32_DiskDrive.DeviceID='" & _
$DiskDrive.DeviceID & "'} Where AssocClass = Win32_DiskDriveToDiskPartition")
For $DiskPartition In $DiskPartitions
Dim $LogicalDisks = $Services.ExecQuery ("Associators of {Win32_DiskPartition.DeviceID='" & _
$DiskPartition.DeviceID & "'} Where AssocClass = Win32_LogicalDiskToPartition")
For $LogicalDisk In $LogicalDisks
If $LogicalDisk.DeviceID = $var[$i] Then
$specifs[$i-1][0] = $var[$i]
$specifs[$i-1][1] = $DiskDrive.Caption
$specifs[$i-1][2] = Round(DriveSpaceTotal($var[$i])/1000 )
$specifs[$i-1][3] = Round(DriveSpaceFree($var[$i])/1000 )
$specifs[$i-1][4] = Round($LogicalDisk.Size/1000000000)
$specifs[$i-1][5] = $DiskPartition.DeviceID
$specifs[$i-1][6] = $LogicalDisk.VolumeName
EndIf
Next
Next
Next
Next
Return $specifs
EndFunc