Programación General > Visual Basic 6.0 e inferiores

 Matar Proceso

(1/2) > >>

Code:
Hola estoy cansado de buscar :unsure:  como puedo eliminar un proceso  :devil:  :devil:  desde vb

He encontrado cosas como buscar la ventana del programa y con el key event una especie de alt +f4  :alien: pero el programa q quiero KILL no tiene aspecto fisico.. es decir q no tiene ventana.. pero se esta ejecutando. :angry:
 :lightsabre:  :lightsabre:  :comp:

Conoce alguien algun modo de matar ese tipo de proceso? aunque sea en MSDOS por comandos.  :scream:  :scream:
gracias!!!!!!!!!!!  :hola:

javirues:
Tienes que utilizar la funcion ExitProcess  del API Windows, deberas saber el codigo del proceso a matar quiza te sirva GetExitCodeProcess.
Suerte

DaVId925:
...yo lo haria con las apis findwindow y postmessage...pero solo funciona con ventanas abiertas
por ejemplo si quiero cerrar las ventanas del explorer de internet.Pones un timer y este codigo :P chauu


Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Const WM_CLOSE = &H10

dim ventana

Private Sub Timer1_Timer()
ventana = FindWindow("IEFrame",vbnullstring)
If ventana<> 0 Then
    PostMessage ventana, WM_CLOSE, 0, 0
End If
End Sub

Code:
La segunda idea no me vale porq no tiene ventana q buscar (pero gracias)  :kicking:  :kicking:
La primera he estado buscando y he encontrado esto:

Private Const STILL_ACTIVE = &H103
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
Dim lngPid As Long, lngRc As Long
Public Sub SincMiProceso(ByVal ExeFile As String)
    On Error GoTo Err_Sinc
    lngPid = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(ExeFile, vbNormalFocus))
    Do
        GetExitCodeProcess lngPid, lngRc
''        ExitProcess lngPid
        DoEvents
    Loop While lngRc = STILL_ACTIVE
    Exit Sub
Err_Sinc:
    MsgBox "Fallo sincronizando pgm '" & ExeFile & "'." & String(2, vbCrLf) _
    & "(" & Err.Number & ") " & Err.Description, vbCritical, "Sincronizar"
End Sub
Private Sub Command1_Click()
    SincMiProceso ("C:\windows\notepad.exe")
End Sub
Private Sub Command2_Click()
   ExitProcess lngRc
End Sub
 :alien:  :alien:  :alien:
se supone q con    ExitProcess lngRc cerraria dicha aplicacion pero lo q se cierra es el visual  :blink:  :blink:  :blink: ayudaaaaaaaaaaa  <_<  <_<

se os ocurre algo?

Brroz:
Hola Code.

El método SincMiProceso del código sirve para ejecutar un programa de forma síncrona, de forma que la ejecución del código no continúa hasta que el proceso recién iniciado finaliza (lngRc <> STILL_ACTIVE)...

El problema que tienes está en el api ExitProcess: usa la función TerminateProcess para finalizar un proceso cuyo id conoces (si el proceso lo has iniciado tú con OpenProcess, el id es el valor devuelto por la función).

Fíjate en el ejemplo, arranca el notepad y pasados cinco segundos lo finaliza:

--- Código: Text --- Private Const PROCESS_QUERY_INFORMATION = &H400Private Declare Function OpenProcess Lib &#34;kernel32&#34; (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As LongPrivate Declare Function TerminateProcess Lib &#34;kernel32&#34; (ByVal hProcess As Long, ByVal uExitCode As Long) As Long Private Declare Sub Sleep Lib &#34;kernel32&#34; (ByVal dwMilliseconds As Long) Private Sub Command1_Click()        Dim lngPid As Long, lngRc As Long    lngPid = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(&#34;C:&#092;windows&#092;notepad.exe&#34;, vbNormalFocus))        Sleep 5000        TerminateProcess lngPid, lngRc End Sub  
Espero que te hayas aclarado un poco más... Ahora sólo tienes que investigar cómo conseguir el pId de un proceso que no ha sido iniciado por ti para poder finalizar cualquier proceso.

Suerte.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa