none
Como encontrar o PID do ultimo processo e matar. RRS feed

  • 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

    quarta-feira, 20 de novembro de 2013 09:06

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

    quinta-feira, 21 de novembro de 2013 12:10
    Moderador

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


    quarta-feira, 20 de novembro de 2013 14:02
    Moderador
  • 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




    quinta-feira, 21 de novembro de 2013 09:07
  • 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

    quinta-feira, 21 de novembro de 2013 12:10
    Moderador
  • Mais uma vez Fabio, muito obrigado!!!

    Era exatemente isto que eu estava precisando. Vou testar e posto aqui o resultado.

    Julio


    Julio Paul Woyakewicz

    sexta-feira, 22 de novembro de 2013 09:00