[R] Commande DOS ne fonctionne pas avec STDOUT

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
parazitenew
Niveau 7
Niveau 7
Messages : 310
Enregistré le : sam. 10 déc. 2011 15:08
Localisation : Algerie
Status : Hors ligne

[R] Commande DOS ne fonctionne pas avec STDOUT

#1

Message 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.
Modifié en dernier par parazitenew le sam. 09 sept. 2017 18:41, modifié 1 fois.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

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

#2

Message 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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
parazitenew
Niveau 7
Niveau 7
Messages : 310
Enregistré le : sam. 10 déc. 2011 15:08
Localisation : Algerie
Status : Hors ligne

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

#3

Message 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.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

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

#4

Message 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)
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
parazitenew
Niveau 7
Niveau 7
Messages : 310
Enregistré le : sam. 10 déc. 2011 15:08
Localisation : Algerie
Status : Hors ligne

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

#5

Message par parazitenew »

ça marche. Merci, effectivement c'était bien default qui causait l'erreur. :)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#6

Message par Tlem »

Bonsoir,
Que reprochez-vous à la commande DriveGetSerial() ?

Code : Tout sélectionner

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

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre