• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pbreda

[x] Explorer.exe Killing (Resolvido)

30 mensagens neste tópico

Caros compatriótas, gostaria de me informar como terminar o processo Explorer.exe para que possa anular a barra iniciar e muitas outras coisas...

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como é que faço para cancelar totalmente o processo Explorer?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Shell "tskill explorer" 

Usa este comando.

Por motivos de segurança envio-te o código por pm!

Pois o código crasha o pc !

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Shell "tskill explorer" 

Usa este comando.

Por motivos de segurança envio-te o código por pm!

Pois o código crasha o pc !

Quando dizes que crasha o PC, estaste a referir a que código??? a este "Shell "tskill explorer" mas correcto?

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como é que faço para cancelar totalmente o processo Explorer?

Vais ao Task Manager (Ctrl-Alt-Del) seleccionas explorer.exe, End Process. Para iniciar de novo vais a File, New Task (Run...), escreves explorer.exe e clicas em OK.

Acho que é isto que tu queres, se não entendi mal a pergunta. :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu quero um codigo que termine o processo...quero que seja tudo automático.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Shell "tskill explorer" 

Usa este comando.

Por motivos de segurança envio-te o código por pm!

Pois o código crasha o pc !

Quando dizes que crasha o PC, estaste a referir a que código??? a este "Shell "tskill explorer" mas correcto?

cumps

Não, isso ai é um excerto do código, pois o código em si altera as chaves do registo !

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Shell "tskill explorer" 

Usa este comando.

Por motivos de segurança envio-te o código por pm!

Pois o código crasha o pc !

Quando dizes que crasha o PC, estaste a referir a que código??? a este "Shell "tskill explorer" mas correcto?

cumps

Não, isso ai é um excerto do código, pois o código em si altera as chaves do registo !

hmmm, ja estou a ver... O que o teu código faz é retira o Explorer.exe do arranque certo?

Mas se for issu, ha maneiras mais faceis, basta utilizar uma ou duas API's e ele consssegue terminar o processo :P

Ja agora podesme enviar o código tb para eu ver :confused:

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ja agora um código para a mesa 1110011110101111010011 [skin em linguagem binária :P].

E concretamente para que queres isso?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sorry pela resposta anterior, não reparei que isto era a secção de VB  :wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sorry pela resposta anterior, não reparei que isto era a secção de VB  :wallbash:

LOL,.. eu ia a fazer um post igualzinho ao teu, mas antes de enviar reparei eheh

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não faltam por ai "process kills". Tinha um de linha de comando (identico ao ps do Linux) que fazia isso.

Google it. :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

...Tinha um de linha de comando...

É o que o ®idelight postou, só que esta com um erro, o comando certo é taskkill. Depois tem varios argumentos como forçar o proceço a terminar, envez de ser com o nome do processo pode ser com o PID, etc...

Eu pessoalmente utilizo API's, mas com a linha de comandos tb n vejo problema nenhum :confused:

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

...Tinha um de linha de comando...

É o que o ®idelight postou, só que esta com um erro, o comando certo é taskkill. Depois tem varios argumentos como forçar o proceço a terminar, envez de ser com o nome do processo pode ser com o PID, etc...

Eu pessoalmente utilizo API's, mas com a linha de comandos tb n vejo problema nenhum :confused:

cumps

Não era esse NuGuN, o comando que eu tinha chamava-se pskill. Há por ai muitos idênticos que fazem +/- a mesma coisa, com mais ou menos funcionalidade.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hhhmmm, entao n conheço  :-[

EDIT

Eu num dos posts anteriores disse que o comando tskill não estava correcto, mas, foi erro meu  :wallbash:  como só conhecia o comandl taskkill pensava que o ®idelight se tinha enganado  mas afinal eu é que estava enganado  :confused:

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bem, estou muito grato pela vossa assistencia, o que kero exatamente é terminar o processo do Explorer em vb 6.0 com API em sem mexer no registo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem decidi postar um código um pouco mais complicado mas mais eficiente, e vou tb aproveitar para tirar duvidas  :P

O código é o seguinte:

Option Explicit
'- Declares
Declare Function TerminateProcess _
Lib "kernel32" (ByVal ApphProcess As Long, _
ByVal uExitCode As Long) As Long
Declare Function OpenProcess Lib _
"kernel32" (ByVal dwDesiredAccess As Long, _
ByVal blnheritHandle As Long, _
ByVal dwAppProcessId As Long) As Long
Declare Function ProcessFirst _
Lib "kernel32" Alias "Process32First" _
(ByVal hSnapshot As Long, _
uProcess As PROCESSENTRY32) As Long
Declare Function ProcessNext _
Lib "kernel32" Alias "Process32Next" _
(ByVal hSnapshot As Long, _
uProcess As PROCESSENTRY32) As Long
Declare Function CreateToolhelpSnapshot _
Lib "kernel32" Alias "CreateToolhelp32Snapshot" _
(ByVal lFlags As Long, _
lProcessID As Long) As Long
Declare Function CloseHandle _
Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetVersion _
Lib "kernel32" () As Long
Private Declare Function GetCurrentProcess _
Lib "kernel32" () As Long
Private Declare Function OpenProcessToken _
Lib "advapi32" (ByVal ProcessHandle As Long, _
ByVal DesiredAccess As Long, _
TokenHandle As Long) As Long
Private Declare Function LookupPrivilegeValue _
Lib "advapi32" Alias "LookupPrivilegeValueA" _
(ByVal lpSystemName As String, _
ByVal lpName As String, _
lpLuid As LUID) As Long
Private Declare Function AdjustTokenPrivileges _
Lib "advapi32" (ByVal TokenHandle As Long, _
ByVal DisableAllPrivileges As Long, _
NewState As TOKEN_PRIVILEGES, _
ByVal BufferLength As Long, _
PreviousState As Any, _
ReturnLength As Any) As Long
'------
'-Constants

Const MAX_PATH& = 260
Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_QUERY = &H8
Const SE_PRIVILEGE_ENABLED = &H2
Const PROCESS_ALL_ACCESS = &H1F0FFF
'----------
'- Types
Private Type LUID
lowpart As Long
highpart As Long
End Type

Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
LuidUDT As LUID
Attributes As Long
End Type

Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szexeFile As String * MAX_PATH
End Type
'---------------------------------------
Public Function KillApp(myName As String) As Boolean
Const TH32CS_SNAPPROCESS As Long = 2&
Const PROCESS_ALL_ACCESS = 0
Dim uProcess As PROCESSENTRY32
Dim rProcessFound As Long
Dim hSnapshot As Long
Dim szExename As String
Dim exitCode As Long
Dim myProcess As Long
Dim AppKill As Boolean
Dim appCount As Integer
Dim i As Integer
On Local Error GoTo Finish
appCount = 0

uProcess.dwSize = Len(uProcess)
hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
rProcessFound = ProcessFirst(hSnapshot, uProcess)
Do While rProcessFound
i = InStr(1, uProcess.szexeFile, Chr(0))
szExename = LCase$(Left$(uProcess.szexeFile, i - 1))
If Right$(szExename, Len(myName)) = LCase$(myName) Then
KillApp = True
appCount = appCount + 1
myProcess = OpenProcess(PROCESS_ALL_ACCESS, False, uProcess.th32ProcessID)

If KillProcess(uProcess.th32ProcessID, 0) Then
'They been killed =D
End If

End If
rProcessFound = ProcessNext(hSnapshot, uProcess)
Loop
Call CloseHandle(hSnapshot)
Exit Function
Finish:
MsgBox "An error ocurred trying to close this process"
End Function

'Terminate any application and return an exit code to Windows.
Function KillProcess(ByVal hProcessID As Long, Optional ByVal exitCode As Long) As Boolean
Dim hToken As Long
Dim hProcess As Long
Dim tp As TOKEN_PRIVILEGES


If GetVersion() >= 0 Then

If OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hToken) = 0 Then
GoTo CleanUp
End If

If LookupPrivilegeValue("", "SeDebugPrivilege", tp.LuidUDT) = 0 Then
GoTo CleanUp
End If

tp.PrivilegeCount = 1
tp.Attributes = SE_PRIVILEGE_ENABLED

If AdjustTokenPrivileges(hToken, False, tp, 0, ByVal 0&, ByVal 0&) = 0 Then
GoTo CleanUp
End If
End If

hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, hProcessID)
If hProcess Then

KillProcess = (TerminateProcess(hProcess, exitCode) <> 0)
' close the process handle
CloseHandle hProcess
End If
If GetVersion() >= 0 Then
' under NT systems restore original privileges
tp.Attributes = 0
AdjustTokenPrivileges hToken, False, tp, 0, ByVal 0&, ByVal 0&
CleanUp:
If hToken Then CloseHandle hToken
End If
End Function

Para utilizar basta :

Dim strExe As String
strExe = "nome_do_processo.exe" 'neste caso explorer.exe
KillApp (strExe)

Agora eu tenho aqui algumas duvidas soubre esse código  :bored:

Comesso por não perceber logo ao inicio... nesta linha -> uProcess.dwSize = Len(uProcess)

Ele fica com o valor 296, agora eu não percebo de onde vem esse 296 se uProcess ainda não recebeu valor nenhum como pode ter 296 de "comprimento" ??

Agora estas duas meninas...

Esta primeira, pelo que vi serve para listar os processos, mas estive a ver e retorna um numero, o que me deixa a patinar  :wallbash:

hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)

Esta, se bem percebi posicionanos no promeiro processo da lista

rProcessFound = ProcessFirst(hSnapshot, uProcess)

Depois temos um ciclo que enquanto não chegar ao fim da lista dos processos não para. E nece ciclo suponho que aconteça o seguinte

Aqui retiramos o numero de caracteres que o nome do processo que se esta a analizar no momento, tem

i = InStr(1, uProcess.szexeFile, Chr(0))

Nesta retira-se o numero de caracteres que corresponde ao nome do processo que queremos, ou seja, o nosso processo é teste.exe(tem 9 caracteres) agora na lista de processos, com o ciclo vamos guardar 9 caracteres de todos os nomes dos processos

szExename = LCase$(Left$(uProcess.szexeFile, i - 1))

Em seguida verifica-se se o processo que se esta a analizar corresponde ao processo que queremos

If Right$(szExename, Len(myName)) = LCase$(myName) Then

Depois guarda-se o PID do processo na variavel uProcess.th32ProcessID

myProcess = OpenProcess(PROCESS_ALL_ACCESS, False, uProcess.th32ProcessID)

Invoca-se a função KillProcess com o argumento(o nome do processo)

KillProcess(uProcess.th32ProcessID, 0)

Depois vai-se passando de processo para processo e volta ao inicio do ciclo

rProcessFound = ProcessNext(hSnapshot, uProcess)

Agora na Função KillProcess vem o descalabre  :wallbash:

Não percebo o que estas linhas fazem. Penso que tem a ver com ganhar previlegios para poder fechar o processo sendo que o processo não foi iniciado pela aplicação, mas não tenho a certesa e nem sei para que são tantos passo  :wallbash:

If OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hToken) = 0 Then
GoTo CleanUp
End If

If LookupPrivilegeValue("", "SeDebugPrivilege", tp.LuidUDT) = 0 Then
GoTo CleanUp
End If

tp.PrivilegeCount = 1
tp.Attributes = SE_PRIVILEGE_ENABLED

If AdjustTokenPrivileges(hToken, False, tp, 0, ByVal 0&, ByVal 0&) = 0 Then
GoTo CleanUp
End If

Nesta linha atravez do PID obtem-se outro valor para a variavel hProcess que eu pensava que era o Handle ou há 2 Handle, uma para a aplicação e outro para o processo?

hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, hProcessID)

E finalmente fecha-se o processo utilizando a API TerminateProcess

KillProcess = (TerminateProcess(hProcess, exitCode) <> 0)

Depois vem esta ultima parte que ha coisas que percebo e outras que não

' close the process handle
CloseHandle hProcess
End If
If GetVersion() >= 0 Then
' under NT systems restore original privileges
tp.Attributes = 0
AdjustTokenPrivileges hToken, False, tp, 0, ByVal 0&, ByVal 0&
CleanUp:
If hToken Then CloseHandle hToken

A duvida soubre estas linhas é porque se tem de fechar o Handle do processo, ou ate mesmo , o que é o Handle, eu penso que seja um numero que identifia o a aplicação mas issu fecha-se  :dontgetit: ??

Se alguem me soube-se tirar essas duvidas e dizer se as explicação esta correcta eu agradecia(muito  :D )

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Caro NuGuN, este codigo funciona correctamente???? Desculpa-me tar a fazer esta pergunta é que neste momento nao tenho monitor.

Obrigado por tudo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Caro NuGuN, este codigo funciona correctamente???? Desculpa-me tar a fazer esta pergunta é que neste momento nao tenho monitor.

Obrigado por tudo

Sim funciona correctamente. Mas não tens monitor porque esta avariado, ou estas-te a referir a quando fechaste o explorer.exe que ficaste sem o ambiente de trabalho no monitor? lol

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O monitor não funciona mesmo eu estou a usar o ps de um primo porque como deves saber estou de ferias.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Consegui testar o codigo mas a aplicacao que pretendo terminar é iniciada passado algum tempo de eu a ter terminado. Será que não há maneira de a aplicacao nao se iniciar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

epa... nao querias fechar o explorer.exe?? aqui no meu esse se eu o fechar ele ja nao se abre mais

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora