Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

[RESOLU]Conseil en VBS ( Merci sebdraluorg )


Messages recommandés

Posté(e) (modifié)

Bonjour

 

 

J'ai, à partir d'un script existant, modifier celui-ci afin d'arrêter un processus indésirable.( ent32.exe, une fenêtre de monitoring de mon onduleur )

 

Le voici :

 

Set WshShell = WScript.CreateObject("WScript.Shell")

WScript.Sleep 10000

WshShell.Run ("Taskkill.exe /F /IM ent32.exe")

WScript.Sleep 500

WScript.Quit

 

Est-il possible d'y ajouter, en début, un test pour vérifier et attendre que ce processus soit effectivement lancé à la place du WScript.Sleep 10000 ?

Modifié par Berfizan

Posté(e)

Salut,

 

Oui c'est possible la classe wmi propose une notification de creation de process si je me souviens bien, sinon au pire tu enum les process en cours et tu verifie s'il le tiens y est, si il est pas, tu sleep 1 seconde et tu recommence par exemple...

 

++

Posté(e)

Bonjour

 

Merci de la réponse mais ça ne m'avance guère, je n'y connais rien du tout en VBS, j'attends donc plutôt une modif de mon existant .. :P

Posté(e)

erf... faut pas que je l'execute pour toi tant qu'on y est? :P

 

Bon allez j'vais etre gentil...

 

Voici un bout de code qui va attendre que le process ent32.exe soit cree et aussi tot va le fermer, puis se fermer lui meme.

 

Option Explicit

Dim objWMIService 
Dim colMonitoredProcesses
Dim objLatestProcess 


Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colMonitoredProcesses = objWMIService.ExecNotificationQuery("select * from __instancecreationevent " & " within 1 where TargetInstance isa 'Win32_Process'")

Do 
Set objLatestProcess = colMonitoredProcesses.NextEvent
	if Ucase(objLatestProcess.TargetInstance.Name) = "ENT32.EXE" then
	objLatestProcess.TargetInstance.Terminate
	exit do
end if

Loop

Set objWMIService = Nothing
Set colMonitoredProcesses = Nothing

 

++

Posté(e) (modifié)
erf... faut pas que je l'execute pour toi tant qu'on y est? :P

 

Bonjour

 

Ben si je veux bien car, avec mon ignorance dans le domaine, un copier/coller de ton code dans un fichier .vbs et exécution de celui-ci ne donne strictement rien. :P

 

Merci d'avance

Modifié par Berfizan
Posté(e)

re,

 

Eh il ne se passe rien ou bien tu ne vois rien ?

 

Le script tourne en arriere plan jusqu'a ce que le process ent32.exe soit executé, puis le ferme et s'arrete.

Tu n'est donc pas sencé voir quelques choses...

As tu essayer de lancer le process ent32.exe apres avoir lancer le script ?

 

Pour verifier que le script est en cours tu peux regarder apres le process wscript.exe dans le taskmgr

 

++

Posté(e)

Avec mon script, l'icône de ce process présent dans le systray disparait avec l'exécution de mon script et dan s la liste des process.

 

Avec ton code, il reste présent.

Posté(e)

hum, a mon avis on s'est pas bien compris.

 

Mon script ne fonctionne ke si le process est lancé apres lui.

Vu ton sleep 10000 je pensais que c'est ce que tu voulais, mais en fait tu veux que le script verifie si le process est deja en cours des l'execution et si il ne l'est pas attendre qu'il le soit ? c'est bien ca ?

 

Si oui, dis le moi je modifirais le code....

 

++

Posté(e) (modifié)

Oui c'est bien cela.

 

Est-il possible d'y ajouter, en début, un test pour vérifier et attendre que ce processus soit effectivement lancé

 

 

Ps : tu as raison, ton script marche si on le lance avant mon ent32

Modifié par Berfizan
Posté(e)

re,

 

voila

Option Explicit


Dim colProcessList 
Dim objWMIService 
Dim colMonitoredProcesses
Dim objLatestProcess 
Dim bFound
Dim objProcess 

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")


Set colProcessList = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'ENT32.EXE'")
For Each objProcess in colProcessList
objProcess.Terminate()
bFound = True	
Next

If bFound = True Then WScript.Quit


Set colMonitoredProcesses = objWMIService.ExecNotificationQuery("select * from __instancecreationevent " & " within 1 where TargetInstance isa 'Win32_Process'")

Do 
Set objLatestProcess = colMonitoredProcesses.NextEvent
	if Ucase(objLatestProcess.TargetInstance.Name) = "ENT32.EXE" then
	objLatestProcess.TargetInstance.Terminate
	exit do
end if

Loop

Set objWMIService = Nothing
Set colMonitoredProcesses = Nothing
set objLatestProcess = Nothing
set colProcessList = Nothing

 

++

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...