Page 1 sur 1
[R] Partitions et lettres attribuées
Posté : mer. 29 janv. 2014 09:10
par GhostLine
Salut les gens !
Suite à ce topic :
http://www.autoitscript.fr/forum/viewto ... =3&t=12054
J'ai besoin de lancer des synchronisations de données sur plusieurs disques connectés en USB sur un PC : je dois cependant être capable de dire si ces disques disposent bien de deux partitions égales, et connaitre les lettres de lecteur qui vont être attribuées à ces deux partitions.
Dans le précédent topic, j'ai eu de quoi identifier le disque (en récupérant son s/n), ce qui me permettra de dire via une interface "le disque xxx est prêt et peut être déconnecté" : mais comment faire pour récupérer les autres informations dont j'ai besoin sans prendre le risque de m'emmeler les pinceaux ?
Merci d'avance

Re: [..] Partitions et lettres attribuées
Posté : mer. 29 janv. 2014 12:42
par GhostLine
Et je me réponds en partie à moi même avec ce topic du forum américain :
http://www.autoitscript.com/forum/topic ... e-letters/
Re: [..] Partitions et lettres attribuées
Posté : mer. 29 janv. 2014 22:01
par jguinch
Tu as répondu en partie, certes, mais il te manque quoi ?
Re: [..] Partitions et lettres attribuées
Posté : jeu. 30 janv. 2014 09:10
par GhostLine
... et voilà la fin

J'ai laissé des msgbox pour les gens qui voudraient compiler le code pour le tester.
► Afficher le texte
Code : Tout sélectionner
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=..\..\..\WN.ico
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
Local $objWMIServices = ObjGet("winmgmts:" & "{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
Local $sink = ObjCreate("WbemScripting.SWbemSink")
ObjEvent($sink, "SINK_")
Local $model, $size
$objWMIServices.ExecNotificationQueryAsync($sink, "SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_DiskDrive'")
local $output
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDiskToPartition", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
While 1
Sleep(250)
WEnd
Func SINK_OnObjectReady($objObject, $objAsyncContext)
If $objObject.TargetInstance.InterfaceType = "USB" Then
Select
Case $objObject.Path_.Class() = "__InstanceCreationEvent"
$model = $objObject.TargetInstance.model
$size = $objObject.TargetInstance.size
$id = $objObject.TargetInstance.DeviceId
$sn = $objObject.TargetInstance.SerialNumber
ConsoleWrite("Lecteur " & $model & " ajouté : taille = " & $size & ", Lettre(s) : " & _GetDriveLetterFromDisk($id) &" "& $sn &@CRLF)
MsgBox(0,"","Type HDD : "&$model & @CRLF & "Taille : "& $size / 1024 /1024 &" Mo" & @CRLF & "Lettre(s) lecteur : "&_GetDriveLetterFromDisk($id) &@CRLF&"N° de série : "& $sn)
Case $objObject.Path_.Class() = "__InstanceDeletionEvent"
$model = $objObject.TargetInstance.model
ConsoleWrite("Lecteur " & $model & " supprimé" & @CRLF)
MsgBox(0,"","Lecteur "&$model&" déconnecté.")
EndSelect
EndIf
EndFunc ;==>SINK_OnObjectReady
Func _GetDriveLetterFromDisk($sName)
Local $iFlags = 0x10 + 0x20 ; $wbemFlagReturnImmediately + $wbemFlagForwardOnly
$sDrive = ""
$sName = StringReplace($sName, "\", "\\")
$oq_part = $objWMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & $sName & """} WHERE AssocClass = Win32_DiskDriveToDiskPartition", "WQL", $iFlags)
If IsObj($oq_part) Then
For $obj_part In $oq_part
$oq_disk = $objWMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" & $obj_part.DeviceID & """} WHERE AssocClass = Win32_LogicalDiskToPartition", "WQL", $iFlags)
If IsObj($oq_disk) Then
For $obj_disk In $oq_disk
$sDrive &= $obj_disk.Name
Next
EndIf
Next
EndIf
Return $sDrive
EndFunc ;==>_GetDriveLetterFromDisk
Re: [R] Partitions et lettres attribuées
Posté : sam. 01 févr. 2014 14:16
par walkson
Bonjour,
Je me permets une petite remarque, le ObjGet("winmgmts:") ne reconnait pas toujours tous les disques. J'ai eu la mauvaise plaisanterie avec un disque externe WD reconnu une fois sur deux.
Sinon, en solution de facilité mais avec WIN, il y a :
; AutoIt ScriptOMatic
; AutoIt's counterpart of Microsoft's Scriptomatic
; Author: SvenP
; Date/version: 2005-04-17
; See also:
http://www.microsoft.com/technet/script ... ipto2.mspx
; Requires: AutoIt beta version 3.1.1.8 or higher (COM support!!)
; GUI generated by AutoBuilder 0.5 Prototype