2009-12-09 7 views
2

J'essaie d'écrire un fichier de commande Windows pour ouvrir une page Web dans IE, attendez le chargement, puis fermez la fenêtre IE. Les travaux suivants, mais vont tuer toutes les fenêtres IE donc ceux qui étaient déjà ouverts avant d'exécuter le .cmd seront également fermés. Je veux seulement tuer l'IE qui a été ouvert.Comment tuer la dernière fenêtre Internet Explorer ouverte en utilisant une commande?

start iexplore.exe "page to load" 
ping localhost -n 10 > nul 
taskkill /IM iexplore.exe 

Je sais que je peux tuer un processus particulier si je connais son PID mais comment le trouver depuis la ligne de commande? Y at-il un moyen de l'obtenir lors du démarrage de la fenêtre IE? Ce que je veux vraiment faire est:

start iexplore.exe "page to load" 
ping localhost -n 10 > nul 
taskkill /PID ? 

où? est le PID de l'IE qui est ouvert mais comment puis-je l'obtenir? Cela doit s'exécuter en tant que fichier .cmd sans aucune entrée d'un utilisateur.

+1

Peut-être récupérer un outil comme Process Explorer, http://download.sysinternals.com/Files/ProcessExplorer.zip. Je pense que ce que vous devez faire est de tuer seulement iexplore.exe avec l'ID de processus le plus élevé. Mes deux centimes. – nickytonline

+0

Il va être exécuté sur diverses machines donc je ne dois pas avoir à installer quelque chose sur chacun d'eux et il va être un travail planifié ne peut donc pas compter sur un utilisateur qui vérifie ce qui est le plus élevé, je dois être capable de le faire dans le cadre d'une commande si possible. –

+0

La dernière fois que j'ai vérifié, tuer un processus iexplore.exe les bloque tous. –

Répondre

4

IE soutient déjà l'automatisation, il est inutile de trouver et de tuer le processus correct:

Set IE = CreateObject("InternetExplorer.Application") 
IE.visible=true 
IE.navigate "http://stackoverflow.com/" 
while IE.Busy 
WScript.Sleep 555 
wend 
IE.Quit 

Enregistrer sous .vbs (Et exécuter avec wscript.exe à partir du programme parent/fichier batch)

+0

Cheers. Fait ce que je veux et peut contrôler l'heure exactement (c'était un peu rude avec mon exemple de ping). –

0

utilisation vbscript

Set objFS=CreateObject("Scripting.FileSystemObject") 
Set objArgs = WScript.Arguments 
strProcess = objArgs(0) 'argument, which is the process name 
strComputer = "." 
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
' call WMI service Win32_Process 
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '"&strProcess&"'") 
t=0 
For Each objProcess in colProcessList 
    ' do some fine tuning on the process creation date to get rid of "." and "+" 
    s = Replace(objProcess.CreationDate ,".","") 
    s = Replace(objProcess.CreationDate ,"+","") 
    ' Find the greatest value of creation date 
    If s > t Then 
     t=s 
     strLatestPid = objProcess.ProcessID 
    End If  
Next 
WScript.Echo "latest: " & t , strLatestPid 
'Call WMI to terminate the process using the found process id above 
Set colProcess = objWMIService.ExecQuery("Select * from Win32_Process where ProcessId =" & strLatestPid) 
For Each objProcess in colProcess 
    objProcess.Terminate() 
Next 

utilisation:

c:\test>cscript //nologo kill.vbs "iexplore.exe" 
+0

Pouvez-vous donner un peu d'explication sur comment cela fonctionne s'il vous plaît? Je n'ai jamais utilisé vbscript auparavant. –

Questions connexes