Page 1 sur 1

[R] Commande DOS ne fonctionne pas avec STDOUT

Posté : sam. 09 sept. 2017 14:10
par parazitenew
Bonjour,

Afin de récupérer le numéro de série du HDD, j'utilise cette commande DOS.

Code : Tout sélectionner

wmic path Win32_DiskDrive get SerialNumber
D'habitude pour récupérer la valeur, j'enregistre sur fichier .txt temporaire puis je le supprime.
RunWait(@comSpec & ' /c' & ' wmic path Win32_DiskDrive get SerialNumber > ' & @TempDir & "\serial.txt","",@SW_HIDE)
$file = FileOpen(@TempDir & "\serial.txt",0)
$serial= FileReadLine($file,2)
   FileClose($file)
   FileDelete(@TempDir & "\serial.txt")
ça marche bien, mais je me suis essayé à récupérer la valeur directement sans passer par un fichier texte externe, alors j'ai lu quelques vieux topics ici et l'aide de Autoit pour arriver à ceci:
#include <Constants.au3>
$cmd = @ComSpec & " /c"&" wmic path Win32_DiskDrive get SerialNumber"
$pid = Run($cmd, Default, @SW_HIDE,$STDOUT_CHILD)
$line = StdoutRead($pid)
ProcessWaitClose($pid)
MsgBox(0, "STDOUT read:", $line)
La boite de dialogue est vide :?

Je sais qu'il me manque un truc mais je ne sais pas ce que c'est. C'est comme le ">" du premier code, si on l'oublie le fichier texte ne sera pas crée.

Re: [..] Commande DOS ne fonctionne pas avec STDOUT

Posté : sam. 09 sept. 2017 15:29
par walkson
Bonjour,
A tout hasard ?...
    Local $sOutput = ""
   $cmd = @ComSpec & " /c"&" wmic path Win32_DiskDrive get SerialNumber"
$pid = Run($cmd, Default, @SW_HIDE,$STDOUT_CHILD)
 While 1
        $sOutput = $sOutput  & StdoutRead($pid)
        If @error Then ; Exit the loop if the process closes or StdoutRead returns an error.
            ExitLoop
        EndIf
        MsgBox($MB_SYSTEMMODAL, "Stdout Read:", $sOutput)
    WEnd

Re: [..] Commande DOS ne fonctionne pas avec STDOUT

Posté : sam. 09 sept. 2017 18:19
par parazitenew
Bonsoir, rien ne se produit. Le script s'est donc arrêté à ExitLoop ce qui veut dire qu'il y a eu erreur.

Re: [..] Commande DOS ne fonctionne pas avec STDOUT  

Posté : sam. 09 sept. 2017 18:32
par orax
La commande n'est pas exécutée. La fonction Run() retourne une erreur.

Code : Tout sélectionner

$pid = Run($cmd, Default, @SW_HIDE, $STDOUT_CHILD)
if @error Then Exit 1
C'est Default qui n'est pas accepté par Run().

Code : Tout sélectionner

#include <Constants.au3>
$cmd = "wmic path Win32_DiskDrive get SerialNumber" ; je pense que '@ComSpec & " /c"' est facultatif dans ce cas
$pid = Run($cmd, "", @SW_HIDE, $STDOUT_CHILD)
If @error Then Exit 1
ProcessWaitClose($pid)
$line = StdoutRead($pid) ; cette ligne doit être placé après ProcessWaitClose()
MsgBox(0, "STDOUT read:", $line)

Re: [..] Commande DOS ne fonctionne pas avec STDOUT

Posté : sam. 09 sept. 2017 18:40
par parazitenew
ça marche. Merci, effectivement c'était bien default qui causait l'erreur. :)

Re: [R] Commande DOS ne fonctionne pas avec STDOUT

Posté : jeu. 14 sept. 2017 22:47
par Tlem
Bonsoir,
Que reprochez-vous à la commande DriveGetSerial() ?

Code : Tout sélectionner

MsgBox(64, "Serial", DriveGetSerial ("c:\"))