Lancement d'un programme avec la méthode .exec
On verra ensuite que cette méthode permet de récupérer le flux de sortie généré par l'exe. On pourra donc analyser ce que va afficher le programme.
Set WSHShell = CreateObject("WScript.Shell")
Set MonExe = WSHShell.Exec("notepad") 'Lancement de Notepad
PIDMonExe = MonExe.ProcessID
Wscript.echo "PID de l'exe : " & PIDMonExe
'On attend que le programme soit terminé
Do While MonExe.Status = 0
WScript.Sleep 1000 'Attente de 1 seconde
Loop
Wscript.echo "Exe terminé"
Set MonExe = Nothing
Set WSHShell = Nothing
Lien vers le fichier : cliquez ici
Exemple de lancement d'un programme .exe et affichage immédiat du résultat.
Pour l'exemple nous faisons ici un dir c:\
En adaptant ce script, vous pourrez récupérer le résultat et réagir en fonction
'2015 01 19
'VbScript pour lancer un .exe (et uniquement un .exe)
'Lancez ce .vbs de préférence avec cscript.exe //Nologo
'Ainsi la première ligne récupérée sera la effectivement la première générée par lexe qui sera lancé (et pas autre chose comme "Microsoft (R) Windows Script Host Version 5.8")
Dim WSHShell, ObjExec, Commande, PIDMonExe, UneLigneDeResultat, NumeroLigneResultat
Commande = "cmd.exe /C ""dir c:\""" 'Pour l'exemple on va lancer un "dir c:\"
Set WSHShell = CreateObject("WScript.Shell")
Set ObjExec = WSHShell.Exec(Commande) 'Lancement de l'exe
PIDMonExe = ObjExec.ProcessID 'Récupération du PID de l'exe
'Récupération du résultat affiché par l'exe
NumeroLigneResultat = 0
Do While Not ObjExec.StdOut.AtEndOfStream
NumeroLigneResultat = NumeroLigneResultat + 1
UneLigneDeResultat = ObjExec.StdOut.ReadLine() 'On récupère une ligne générée par l'exe
Wscript.echo UneLigneDeResultat 'On affiche cette ligne
Loop
Wscript.echo "Exe terminé"
Set ObjExec = Nothing
Set WSHShell = Nothing
Lien vers le fichier : cliquez ici
Option Explicit
Dim WSHShell, ObjExec, PIDMonExe
Dim vSystemRoot
Dim Commande, UneLigneDeResultat
Redim MonTableauDynamiquePourResultat(0)
Set WSHShell = CreateObject("WScript.Shell")
vSystemRoot = WSHShell.ExpandEnvironmentStrings("%SystemRoot%")
Wscript.echo "vSystemRoot : " & vSystemRoot
'Commande = vSystemRoot & "\System32\" & "unexe.exe"
Commande = "cmd.exe /C ""dir c:\"""
Set ObjExec = WSHShell.Exec(Commande)
PIDMonExe = ObjExec.ProcessID
Wscript.echo "PID de l'exe : " & PIDMonExe
Do While Not ObjExec.StdOut.AtEndOfStream
'On récupère la ligne
UneLigneDeResultat = ObjExec.StdOut.ReadLine()
Wscript.echo UneLigneDeResultat
'LignesTableauResultat = LignesTableauResultat & UneLigneDeResultat & CHR(1)
'Call ObjExec.Terminate()
'WScript.Sleep 1000 'Attente de 1 seconde
'If Len(LignesTableauResultat) > 0 Then
'LignesTableauResultat = Left(LignesTableauResultat, (Len(LignesTableauResultat) - Len(CHR(1))))
'End If
'Wscript.echo "Code de sortie : " & ObjExec.ExitCode
'MonTableauDynamiquePourResultat = Split(LignesTableauResultat, CHR(1))
Loop
'On attend que le programme soit terminé
'Do While ObjExec.Status = 0
'WScript.Sleep 1000 'Attente de 1 seconde
'Loop
Wscript.echo "Exe terminé"
Set ObjExec = Nothing
Set WSHShell = Nothing
Lien vers le fichier : cliquez ici
Article(s) en relation(s)