Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

vbs pour lister les applications ouvertes

3 réponses
Avatar
Jean-Claude
Bonjour,

j'utilise un script VBS pour exécuter un traitement zzzzzz qui doit
s'exécuter en administrateur dans une fenetre de commande :

admin = "xxxxxx"
password = "xxxxxx"
dim wsh
set wsh = wscript.createobject("wscript.shell")
runexe = wsh.expandenvironmentstrings("%COMSPEC%")
wsh.run runexe & " /c title runas & runas.exe /env /user:" & admin & " """ &
zzzzzz & """"
wscript.sleep 500
wsh.appactivate "runas"
wsh.sendkeys password & "{ENTER}"

Ma question :
après cela, comment savoir quand la commande zzzzzz est terminée (donc la
fenetre de commande fermée) ?
Je pourrais certes utiliser le 3ème param du wsh.run pour que la commande ne
rende la main que quand elle a fini, mais comme je doit simuler la saisie
d'un mot de passe, ca ne convient pas.
Existe-t-il un moyen de balayer les fenêtres ouvertes et vérifier si celle
lancée, ici nommée runas, est toujours présente ?

Merci bien
Jean-Claude

3 réponses

Avatar
Jean-Claude BELLAMY
"Jean-Claude" a écrit dans le message de
groupe de discussion : 4b8aa313$0$17877$
Bonjour,

j'utilise un script VBS pour exécuter un traitement zzzzzz qui doit
s'exécuter en administrateur dans une fenetre de commande :

admin = "xxxxxx"
password = "xxxxxx"
dim wsh
set wsh = wscript.createobject("wscript.shell")
runexe = wsh.expandenvironmentstrings("%COMSPEC%")
wsh.run runexe & " /c title runas & runas.exe /env /user:" & admin & " """
& zzzzzz & """"
wscript.sleep 500
wsh.appactivate "runas"
wsh.sendkeys password & "{ENTER}"

Ma question :
après cela, comment savoir quand la commande zzzzzz est terminée (donc la
fenetre de commande fermée) ?
Je pourrais certes utiliser le 3ème param du wsh.run pour que la commande
ne rende la main que quand elle a fini, mais comme je doit simuler la
saisie d'un mot de passe, ca ne convient pas.
Existe-t-il un moyen de balayer les fenêtres ouvertes et vérifier si celle
lancée, ici nommée runas, est toujours présente ?



Plutôt que la fenêtre, qui est un paramètre "hasardeux" (suivant le
processus, il peut ne pas y avoir de fenêtre ouverte!), il est nettement
préférable de tester l'existence du processus.
Et pour cela, il suffit de faire appel à WMI et la classe "Win32_Process",
en énumérant tous les processus.

Par exemple :

...
Set net = Wscript.CreateObject("WScript.Network")
Computer=net.ComputerName 'nom de l'ordinateur local

NomProc="......." ' le nom du processus à surveiller


Do
Set System=GetObject("winmgmts:{impersonationLevel=impersonate}!//" &
Computer).InstancesOf("Win32_Process")
encoursúlse
for each Process in System
If Strcomp(Process.Name,NomProc,VBTextCompare)<>0 Then
encours=true
exit for
end if
next
if encours then WScript.Sleep 200 'tempo de 200 ms pour souffler un
peu!
loop until not encours

...



--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr
Avatar
Jean-Claude
> Plutôt que la fenêtre, qui est un paramètre "hasardeux" (suivant le
processus, il peut ne pas y avoir de fenêtre ouverte!), il est nettement
préférable de tester l'existence du processus.
Et pour cela, il suffit de faire appel à WMI et la classe
"Win32_Process", en énumérant tous les processus.

Par exemple :

...
Set net = Wscript.CreateObject("WScript.Network")
Computer=net.ComputerName 'nom de l'ordinateur local

NomProc="......." ' le nom du processus à surveiller





Merci, mais comment connaitre le nom de mon processus ?
Puisque je lance une fenetre de commande, s'agit-il de cmd.exe ? Mais je
risque d'en avoir plusieurs, d'où l'intérêt d'être parti sur le nom des
fenêtres, car je donne moi-meme le nom à ma fenetre, que je peux donc
identifier de manière unique.
JC
Avatar
Jean-Claude BELLAMY
"Jean-Claude" a écrit dans le message de
groupe de discussion : 4b8c119c$0$17868$

Plutôt que la fenêtre, qui est un paramètre "hasardeux" (suivant le
processus, il peut ne pas y avoir de fenêtre ouverte!), il est nettement
préférable de tester l'existence du processus.
Et pour cela, il suffit de faire appel à WMI et la classe
"Win32_Process", en énumérant tous les processus.

Par exemple :

...
Set net = Wscript.CreateObject("WScript.Network")
Computer=net.ComputerName 'nom de l'ordinateur local

NomProc="......." ' le nom du processus à surveiller





Merci, mais comment connaitre le nom de mon processus ?


????????????????

Tu sais bien quand même ce que tu lances , non ?
Sinon, c'est de la schizophrénie ! ;-)

Le processus lancé, c'est ce qu'il y a dans le terme "zzzzzz"
(wsh.run runexe & " /c title runas & runas.exe /env /user:" & admin & " """
& zzzzzz & """")

Qu'y a-t-il dedans ?


Puisque je lance une fenetre de commande, s'agit-il de cmd.exe ?


NON, puisque tu te sers de CMD ici uniquement pour exécuter RUNAS qui te
sert, à son tour, à exécuter AUTRE chose !


Mais je risque d'en avoir plusieurs, d'où l'intérêt d'être parti sur le
nom des fenêtres, car je donne moi-meme le nom à ma fenetre, que je peux
donc identifier de manière unique.




Sois un peu plus COMPLET/CONCRET/CONCIS/PRÉCIS, et ça ira tout de suite
mieux!
Que veux tu faire EX-AC-TE-MENT ?

--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr