IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Script de temporisation


Sujet :

VBScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 42
    Par défaut Script de temporisation
    Bonjour à tous,

    J'aimerai modifier un script pour lancer des applications, que j'ai trouvé sur le net. J'aimerai ajouter une fonctionnalité que je pense être simple mais je n'y connais rien en VBscript :

    - Vérifier si l'application que je souhaite démarrer n'est pas déjà lancée
    - Si ce n'est pas le cas, lancer l'appli
    - Si c'est le cas, fermer l'application, puis la relancer

    Le but est de relancer une application avec des paramètres différents, puis de lancer d'autres applis, toujours avec un timing entre chaque.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    ' delay startup of applications, usefull for resident apps which start with windows
    ' this script is public domain ! Use it, modify it, do what you want with it
     
    ' list of applications (modify with your programs)
    myPrograms = Array( _
                 "%SystemRoot%\system32\notepad.exe", _
                 "%SystemRoot%\system32\calc.exe", _
                 "%SystemRoot%\system32\winmine.exe", _
                 "" )
     
    ' main startup delay in seconds (set your own delay)
    iMainDelay = "120"
     
    ' delay between each program in seconds (set your own delay)
    iIntermediateDelay = "15"
     
    ' Set shell object
    Set WshShell = WScript.CreateObject("WScript.Shell" )
     
    ' wait the main delay
    wScript.Sleep(iMainDelay * 1000)
     
    ' launch software
    For Each Program In myPrograms
       If Program <> "" Then
          WshShell.Run(Program)
          wScript.Sleep(iIntermediateDelay * 1000)
       End If
    Next
    Merci !

    Guillaume

  2. #2
    Membre chevronné
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Par défaut
    Salut,

    tu peux essayer ceci, je teste si notepad est démarré ou pas, si oui je ferme et je réouvre notepad, si non j'ouvre notepad :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_Process Where Name = 'notepad.exe'")
     
    For Each objItem in colItems
         objItem.Terminate()
    Next
     
    Set objShell = CreateObject("Wscript.Shell")
    objShell.Run "Notepad.exe", ,True
     
    WScript.Quit
    A++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 42
    Par défaut
    Je te remercie, ton script correspond exactement à ce que je cherche. J'ai essayé de l'intégrer dans mon script, mais il ne fonctionne plus, les applis ne sont pas fermées si déjà existantes, mais elles se lancent. Je dois passer à côté d'un truc, mais quoi ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    ' delay startup of applications, usefull for resident apps which start with windows
    ' this script is public domain ! Use it, modify it, do what you want with it
     
    ' list of applications (modify with your programs)
    myPrograms = Array( _
                 "%SystemRoot%\system32\notepad.exe", _
                 "%SystemRoot%\system32\calc.exe", _
                 "" )
     
    ' main startup delay in seconds (set your own delay)
    iMainDelay = "3"
     
    ' delay between each program in seconds (set your own delay)
    iIntermediateDelay = "2"
     
    ' Set shell object
    Set WshShell = WScript.CreateObject("WScript.Shell" )
     
    ' wait the main delay
    wScript.Sleep(iMainDelay * 1000)
     
    ' launch software
     
    For Each Program In myPrograms
       If Program <> "" Then	
    	strComputer = "."
    	Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & 		
     
    	strComputer & "\root\cimv2")
    	Set colItems = objWMIService.ExecQuery("Select * from Win32_Process Where Name = 	
     
    	Program")
    	For Each objItem in colItems
         	objItem.Terminate()
    	Next
    	WshShell.Run (Program)
    	wScript.Sleep(iIntermediateDelay * 1000)
       End If
    Next
    Merci pour ton aide !

    Guillaume

  4. #4
    Membre chevronné
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Par défaut
    [QUOTE=yaumeguy;3359602]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & 		
     
    	strComputer & "\root\cimv2")
    	Set colItems = objWMIService.ExecQuery("Select * from Win32_Process Where Name = 	
     
    	Program")
    Attention aux saut de lignes, aux doubles et simples quotes, tu dois écrire ta requete comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    	Set colItems = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '" & Program & "'")
    D'autre part j'ai remplacé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    myPrograms = Array( _
                 "%SystemRoot%\system32\notepad.exe", _
                 "%SystemRoot%\system32\calc.exe", _
                 "" )
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    myPrograms = Array( _
                 "%notepad.exe", _
                 "%calc.exe", _
                 "" )
    Apparemment WMI se moque du chemin du process...

    A++

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 42
    Par défaut
    J'ai appliqué tes modifications, il reste un souci, au niveau de WshShell.Run (Program) -> plantage. Je me doute que la syntaxe est mauvaise mais j'ai un peu tout essayé et rien ne marche :-/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    ' delay startup of applications, usefull for resident apps which start with windows
    ' this script is public domain ! Use it, modify it, do what you want with it
     
    ' list of applications (modify with your programs)
    myPrograms = Array( _
                 "%notepad.exe", _
                 "%calc.exe", _
                 "" )
     
    ' main startup delay in seconds (set your own delay)
    iMainDelay = "1"
     
    ' delay between each program in seconds (set your own delay)
    iIntermediateDelay = "1"
     
    ' Set shell object
    Set WshShell = WScript.CreateObject("WScript.Shell" )
     
    ' wait the main delay
    wScript.Sleep(iMainDelay * 1000)
     
    ' launch software
     
    For Each Program In myPrograms
       If Program <> "" Then		
    	strComputer = "."
    	Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    	Set colItems = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '" & Program & "'")
     
    	For Each objItem in colItems
         		objItem.Terminate()
    	Next
     
    	WshShell.Run (Program)
    	wScript.Sleep(iIntermediateDelay * 1000)
       End If
    Next
    Merci !

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    tu peux même enlever le % devant les exécutables.
    Dans ce cas WMI s'attend au nom du processus ciblé.

    Attention WMI et WSH ne fonctionne pas pareil.
    Pour La méthode Run de WSH, il te faut le chemin complet du processus. D'ailleurs en fait avec WMI il te faudrait le chemin complet si tu veux qu'il lance un process.

    Si les programmes à lancer se trouve tous dans Windows\System32, et qu'ils sont donc appelable directement depuis une console dos sans utilisation du chemein complet, tu peux faire tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WshShell.Run ("cmd /c " & Program) 'Attention : Bien laisser un espace entre c et " sinon le nom du programme sera collé au c

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 42
    Par défaut
    Les programmes à lancer ne seront pas dans le system32, j'utilise ces exemples pour simplifier les choses :-)

    Donc du coup, j'ai toujours mon problème, et j'ai beau bidouiller, rien à faire !

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 42
    Par défaut
    J'y suis presque ! Le script a le comportement souhaité, mais je n'arrive pas à généraliser la detection des programmes ouverts, puis la fermeture ! Pour le moment je check si notepad.exe est ouvert et si oui je le ferme avant de le relancer. Mais quand la boucle passe à calc.exe, le script check encore pour notepade.exe, ce n'est pas dynamique. En mettant "Program" à la place de "notepad.exe", ça plante quelque soit la syntaxe que je met autour...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    ' delay startup of applications, usefull for resident apps which start with windows
    ' this script is public domain ! Use it, modify it, do what you want with it
     
    ' list of applications (modify with your programs)
    myPrograms = Array( _
                 "%SystemRoot%\system32\notepad.exe", _
                 "%SystemRoot%\system32\calc.exe", _
                 "" )
     
     
    ' main startup delay in seconds (set your own delay)
    iMainDelay = "1"
     
    ' delay between each program in seconds (set your own delay)
    iIntermediateDelay = "1"
     
    ' Set shell object
    Set objShell = CreateObject("Wscript.Shell")
     
    ' wait the main delay
    wScript.Sleep(iMainDelay * 1000)
     
    ' launch software
     
    For Each Program In myPrograms
       If Program <> "" Then		
    	strComputer = "."
    	Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    	Set colItems = objWMIService.ExecQuery("Select * from Win32_Process Where Name = 'notepad.exe'")
     
    	For Each objItem in colItems
         		objItem.Terminate()
    	Next	
    	objShell.Run Program
     
    	wScript.Sleep(iIntermediateDelay * 1000)
       End If
    Next

  9. #9
    Membre chevronné
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Par défaut
    Citation Envoyé par yaumeguy Voir le message
    Mais quand la boucle passe à calc.exe, le script check encore pour notepade.exe, ce n'est pas dynamique.
    Ce ne serait pas plutot ca ton soucis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set colItems = objWMIService.ExecQuery("Select * from Win32_Process Where Name = 'notepad.exe'")
    A++

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 42
    Par défaut
    oui, c'est exactement ça C'est ce que j'ai tenté d'expliquer au dessus, j'ai mis ça en attendant pour tester le script, mais dès que je met la variable "program" à la place, ça plante, et ce quelque soit la syntaxe :-/

  11. #11
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par yaumeguy Voir le message
    oui, c'est exactement ça C'est ce que j'ai tenté d'expliquer au dessus, j'ai mis ça en attendant pour tester le script, mais dès que je met la variable "program" à la place, ça plante, et ce quelque soit la syntaxe :-/
    on peu voir cette syntaxe ... ? dans ton code plus haut tu rajoute le chemin du programme ... donc il est bien évident que tu ne peu pas arriver à l'égalité voulu ... Where Name= ....

  12. #12
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Je te conseille d'aller sur la FAQ pour voir les bases du traitement des chaines de caractères, et la concaénation d'une chaine de caractère avec la valeur d'une variable.

    Là dans ton script, dans ta boucle, il te reste juste à splitter (fonction Split) avec comme séparateur \ et d'utiliser le dernier élément pour le mettre à la place de notepad.exe en utilisant cette fameuse concaténation.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 42
    Par défaut
    Merci à tous, j'ai ajouté la fonction split et tout fonctionne correctement, c'est quand même mieux de donner les bons paramètres à la fonction Select :-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    ' delay startup of applications, usefull for resident apps which start with windows
    ' this script is public domain ! Use it, modify it, do what you want with it
     
    ' list of applications (modify with your programs)
    myPrograms = Array( _
                 "%SystemRoot%\system32\notepad.exe", _
                 "%SystemRoot%\system32\calc.exe", _
                 "" )
     
    ' main startup delay in seconds (set your own delay)
    iMainDelay = "1"
     
    ' delay between each program in seconds (set your own delay)
    iIntermediateDelay = "1"
     
    ' Set shell object
    Set objShell = CreateObject("Wscript.Shell")
     
    ' wait the main delay
    wScript.Sleep(iMainDelay * 1000)
     
    ' launch software
     
    For Each Program In myPrograms
       If Program <> "" Then		
    	Dim i,tb,ProgShort
    	tb = split(Program,"\")
    	For i = lbound(tb) to ubound(tb)
     	    ProgShort = tb(i)
    	next
    	strComputer = "."
    	Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    	Set colItems = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '"&ProgShort&"'")
     
    	For Each objItem in colItems
         		objItem.Terminate()
    	Next	
    	objShell.Run Program
     
    	wScript.Sleep(iIntermediateDelay * 1000)
       End If
    Next

  14. #14
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    tu dois pouvoir remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	For i = lbound(tb) to ubound(tb)
     	    ProgShort = tb(i)
    	next
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     	    ProgShort = tb(ubound(tb))

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 42
    Par défaut
    Je suis à nouveau face à un problème ! Je souhaite ouvrir un programme situé dans mon dossier program files.
    Problème, le chemin est sous la forme C:\Program Files\blabla ; et l'espace entre Program et Files génère
    une erreur. J'ai tenté les solutions suivantes, échec à chaque fois :

    - ""C:\Program Files\blabla\truc.exe"", _
    - "C:\Program%20Files\blabla\truc.exe", _

    Je ne vois plus trop ce que je peux essayer... Vous avez une idée ? Merci !!

  16. #16
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    1 " pour commencer une chaine de caractère
    1 " pour la terminer.

    " est aussi utilisé comme caractère d'échapement.
    Donc pour écrire une " dans une chaine de caractère il faut faire "".

    Donc si l'on veut afficher dans une msgbox "toto" il faut faire :
    Et s'i l'on veut : c'est "toto" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox "c'est ""toto"""

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 42
    Par défaut
    Merci !! J'ai déjà vu plus intuitif comme syntaxe :-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 07h45
  2. [Batch] Temporisation script batch
    Par fabrice.s dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 03/10/2012, 20h49
  3. [Dojo] Temporiser le script
    Par bellenthan dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 12/03/2010, 18h56
  4. Temporisation de script ASP
    Par shaftJackson dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2009, 15h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo