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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 !

+ 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