No hay mucho que agregar, solo hace falta el nombre del ejecutable del proceso y para el que no sepa reestablecer el explorer luego de ejecutar el code del ejemplo (desaparecen los iconos, barra de inicio, menús de contexto, Etc, Etc) lo haga desde CTL-ALT-SUP (Aministrador, aplicaciones, tarea neva..., explorer, aceptar)
Private Sub Form_Load()
Shell "cmd.exe /c Taskkill /f /IM " + "EXPLORER.EXE"
End Sub
PD: para enumerar los procesos que esten corriendo "WMI" o "API EnumProcesses"
Saludos
Gracias por el code, aunque esto en realidad es usar Batch desde Visual Basic, ya que taskkill es Batch puro....solo que usada desde VB mediante el comando Shell....
De todos modos, buen aporte ;)
mmm.. usa api's para matr procesos no otro exe :xD
ZwTerminateProcess
Esa api si no me equvoco era la api
con la api TerminateProcess ya basta...
Cita de: krackwar en 4 Enero 2009, 21:17 PM
mmm.. usa api's para matr procesos no otro exe :xD
ZwTerminateProcess
Esa api si no me equvoco era la api
Cita de: seba123neo en 4 Enero 2009, 21:35 PM
con la api TerminateProcess ya basta...
Lo malo es que para matar un proceso desde su nombre ejecutable necesitas obtener el PID.. y ya se nos va la linea...
Saludos :D
Me pareció practico y directo, conociendo el nombre del exe
PD: Tambien funciona con PID: Shell "cmd.exe /c Taskkill /PID ####"
Saludos
Cita de: Dessa en 5 Enero 2009, 01:21 AM
Me pareció practico y directo, conociendo el nombre del exe
PD: Tambien funciona con PID: Shell "cmd.exe /c Taskkill /PID ####"
Saludos
Si, pero teniendo el PID es mas util usando OpenProcess y TerminateProcess
MOD:Option Explicit
Private Const PROCESS_TERMINATE As Long = (&H1)
'KERNEL32
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32.dll" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Function CloseProcess(ByVal lPid As Long) As Boolean
CloseProcess = CBool(TerminateProcess(OpenProcess(PROCESS_TERMINATE, 0&, lPid), 0&))
Call CloseHandle(lProc)
End Function
PD: Se podria quitar el CloseHandle.. pero queda mas PRO no? :xD
Saludos ;D
No desenfoques el punto del mensaje "Karcrack", sabiendo el nombre del Proceso a cerrar con esa linea alcanza y para mi por lo menos, me parece práctica, como nombraste al PID, yo Agregué que con el PID tambien funciona, pero como vos decis tenes que agregar 1 módulo, 3 lineas de declaracion de APIs, 1 Funcion y la llamada a la funcion desde el formulario (minimo 8 lineas) sin la "linea PRO" ni la constante que la ponemos directa sin declarar), todo esto contra una linea.
Shell "cmd.exe /c Taskkill /PID ####"
PD: No seas tan negativo, hermano, despues de todo nadie te obliga a usar el Code y quedarse en pequeñeces no suma, mas bien que resta.
Saludos.
Lamento haberte molestado Dessa, simplemente esta poniendo la alternativa... yo tampoco obligo a que lo usen...
Bueno, saliendo de la trifulca quiero decir que he analizado el TaskKill.exe y para obtener el PID del ejecutable indicado no recorre todos los procesos :rolleyes:, los lee desde la memoria :-\ (Aunque mis conocimientos con el Olly no son tantos como para afirmarlo :P)
Asi que a ver si tengo tiempo esta semana y hago una funcion para no depender del TaskKill, solo con ASM y un par de APIs ;D
Saludos ;D