Usuário com melhor resposta
Como encontrar o PID do ultimo processo e matar.

Pergunta
-
Bom dia a todos. Estou tentando encontrar na internet algum script em vbs que me mostre qual foi o ultimo processo que foi executado, me mostre o PID dele e mate este processo. Ja encontrei varios scripts que me mostrem como matar um processo pelo PID, porem oque não estou conseguindo é saber qual o ultimo processo foi executado, encontar este PID para matá-lo.
Obrigado.
Julio
Julio Paul Woyakewicz
Respostas
-
Veja estas modificações:
strComputer = "." set WshShell = WScript.CreateObject("WScript.Shell") WshShell.run "EXPLORER.exe /separate, N:\", 7 Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") Set colProcesses = objWMIService.ExecQuery( _ "select * from win32_process where name='explorer.exe'" ) For Each objProcess in colProcesses ultimoPID = objProcess.handle wscript.echo objProcess.name & " - " & _ objProcess.CreationDate & " - " & _ objProcess.handle Next wscript.echo "Ultimo PID = " & ultimoPID
1)Abri o explorer com a sua linha de comando
2)Na query wmi adicionei um filtro para só retornar os processos explorer.exe
3)coloquei uma variável dentro do loop, ao final eu vou ter o PID do ultimo explorer aberto.
4)Na última linha eu exibo qual é o ultimo PID de processos explorer.exe
Daí pra frente é com você, já tem o PID agora use o seu código para encerrá-lo.
Fábio de Paula Junior
- Sugerido como Resposta Fábio JrModerator quarta-feira, 27 de novembro de 2013 17:25
- Marcado como Resposta Julio Paul Woyakewicz terça-feira, 10 de dezembro de 2013 09:17
Todas as Respostas
-
Julio,
Acho um pouco perigoso isso de matar o último processo, quando você executar um script este passará a ser o último processo. Você não saberia o nome do processo?
Veja este script que lista todos os processos, se não me engano a lista já vem por ordem de criação(ele lista nome, data de criação e PID).
strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") Set colProcesses = objWMIService.ExecQuery( _ "select * from win32_process" ) For Each objProcess in colProcesses wscript.echo objProcess.name & " - " & _ objProcess.CreationDate & " - " & _ objProcess.handle Next
Obs.: Pra terminar o processo basta dentro do loop usar objProcess.terminate.
Ref.:
Win32_Process class
http://msdn.microsoft.com/en-us/library/aa394372(v=vs.85).aspx
Fábio de Paula Junior
- Editado Fábio JrModerator quarta-feira, 20 de novembro de 2013 15:03
-
Bom dia Fabio, muito obrigado pela resposta e ajuda.
Seu script funcionou, porem nesta situacao nao irá me ajudar muito.
Na verdade, estouprocurando o seguinte....
Hoje tenho um script que abre uma janela do windows explorer em uma determinada unidade mapeada de rede, este processo do explorer abre minimizado conforme a linha de comando abaixo.
WshShell.run "EXPLORER.exe /separate, N:\", 7
Entao logo abaixo desta linha acrescentei estas outras duas linhas para esperar 03 segundo e entao fechar o processo. Mas no meu caso nao funcionou muito bem.
WScript.Sleep 3000
WshShell.SendKeys "%{F4}"Porem o que preciso, é que apos aberta esta janela do windows, no final do meu script eu consiga fechar este proceso aberto pelo proprio script. Talvez, se de alguma forma, eu consiguisse alocar em uma variavel o PID deste processo que o script abriu, e no final do script eu chamasse a variavel contento o PID para matar este processo iria solucionar o meu problema.
Eu nao posso matar o processo pelo nome pois existem outras janelas do WIndows explorer que estao sendo usadas pelo usuario e que nao podem ser fechadas.
Nao sei se conseguiu me entender mas desde ja agradeço pelo força prestada.
Julio Paul Woyakewicz
- Editado Julio Paul Woyakewicz quinta-feira, 21 de novembro de 2013 09:10
-
Veja estas modificações:
strComputer = "." set WshShell = WScript.CreateObject("WScript.Shell") WshShell.run "EXPLORER.exe /separate, N:\", 7 Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") Set colProcesses = objWMIService.ExecQuery( _ "select * from win32_process where name='explorer.exe'" ) For Each objProcess in colProcesses ultimoPID = objProcess.handle wscript.echo objProcess.name & " - " & _ objProcess.CreationDate & " - " & _ objProcess.handle Next wscript.echo "Ultimo PID = " & ultimoPID
1)Abri o explorer com a sua linha de comando
2)Na query wmi adicionei um filtro para só retornar os processos explorer.exe
3)coloquei uma variável dentro do loop, ao final eu vou ter o PID do ultimo explorer aberto.
4)Na última linha eu exibo qual é o ultimo PID de processos explorer.exe
Daí pra frente é com você, já tem o PID agora use o seu código para encerrá-lo.
Fábio de Paula Junior
- Sugerido como Resposta Fábio JrModerator quarta-feira, 27 de novembro de 2013 17:25
- Marcado como Resposta Julio Paul Woyakewicz terça-feira, 10 de dezembro de 2013 09:17
-