como hacer que no corre un proceso

Iniciado por Mr pom0, 3 Septiembre 2008, 02:19 AM

0 Miembros y 2 Visitantes están viendo este tema.

Mr pom0

alguna persona se sabe el codigo para hacer que no corran algun proceso en espesifico lo que pasa es que tenemos que hacer un programa no corra en el trabajo y no se me ocurre como hacer que cuando el proceso se ejecute se cierre solito espero y me puedan ayudar muchas gracias

byway

para que no corra no se pero puedes hacer que lo finalize .. cada vez que lo encuentre en memoria ... con un mata procesos...

Public Sub KillProcess(ByVal processName As String)
On Error GoTo ErrHandler
Dim oWMI
Dim Ret
Dim sService
Dim oWMIServices
Dim oWMIService
Dim oServices
Dim oService
Dim servicename
Set oWMI = GetObject("winmgmts:")
Set oServices = oWMI.InstancesOf("win32_process")
For Each oService In oServices
servicename = LCase(Trim(CStr(oService.Name) & ""))
If InStr(1, servicename, LCase(processName), vbTextCompare) > 0 Then
Ret = oService.Terminate
End If
Next
Set oServices = Nothing
Set oWMI = Nothing

ErrHandler:
Err.Clear
End Sub


y lo llamas asi:

KillProcess ("Miexe.exe")



Novlucker

Se que este es el subforo de VB, pero en lugar de intentar codear algo.. has intentado con esto<---click  :rolleyes:

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Mr pom0

Cita de: Novlucker en  3 Septiembre 2008, 03:04 AM
Se que este es el subforo de VB, pero en lugar de intentar codear algo.. has intentado con esto<---click  :rolleyes:

Saludos

gracias por la idea pero lo malo de esto es que si las personas cambian el nombre del ejecutable el proceso si corre y la otra es que solo funciona con windows xp prfecional  de todos modos muchas gracias

byway

si ese es el caso puedes trabajar con el nombre de la ventana activa ... y finalizar el proceso correspondiente... no toma en cuenta el nombre del exe... solo el nombre de la ventana .. lo cual seria lo mejor .. coimo sabras eso no pueden cambiarle a menos que lo editen con algun resoucer o edit hex.

Option Explicit

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 Function TerminateProcess Lib "kernel32" _
(ByVal hProcess As Long, ByVal uExitCode As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject _
As Long) As Long

Private Declare Function GetWindowThreadProcessId Lib "user32" _
   (ByVal hwnd As Long, lpdwProcessId As Long) As Long

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

Const PROCESS_TERMINATE = &H1
Const PROCESS_QUERY_INFORMATION = &H400
Const STILL_ACTIVE = &H103

Public Sub CerrarProceso(TítuloVentana As String)
Dim hProceso As Long
Dim lEstado As Long
Dim idProc As Long
Dim winHwnd As Long

winHwnd = FindWindow(vbNullString, TítuloVentana)
If winHwnd = 0 Then
    Exit Sub
End If
Call GetWindowThreadProcessId(winHwnd, idProc)

' Obtenemos el handle al proceso
hProceso = OpenProcess(PROCESS_TERMINATE Or _
PROCESS_QUERY_INFORMATION, 0, idProc)
If hProceso <> 0 Then
    ' Comprobamos estado del proceso
    GetExitCodeProcess hProceso, lEstado
    If lEstado = STILL_ACTIVE Then
    ' Cerramos el proceso
        If TerminateProcess(hProceso, 9) <> 0 Then
         
        'Else
         
        End If
    End If
    ' Cerramos el handle asociado al proceso
    CloseHandle hProceso
Else

End If
End Sub



y lo llamas asi:

CerrarProceso ("titulo_de_la_ventana")


para obtener el titulo de la ventana basta con ver el admin de tareas (aplicaciones ).

Salu2.

Novlucker

Si, lo del nombre de ejecutable es verdad.... es que había visto que lo mismo se podía hacer de otra manera, en la que se obtenia un identificador único del programa, y con eso no importaba el cambio de nombre... ya lo voy a encontrar por algún lado  :-\

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

seba123neo

Novlucker  se refiere al identificador del programa,el ID del proceso,se puede averiguar  con la api CreateToolhelp32Snapshot y pasarle la estructura de datos PROCESSENTRY32 y dentro de esta la que identifica el ID se llama th32ModuleID , tambien todo eto se puede hacer con la api WTSEnumerateProcesses...en teoria fijate aca para qeu veas lo qeu digo...

Listar y cerrar los ejecutables cargados en el sistema

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

ssccaann43 ©

Hola, bueno espero no ser inoportuno. Adjunto te dejo una aplicación donde seleccionas los programas que no desees que se ejecuten. Sumado a esto puedes aplicarle o listar los procesos y matarlos(debes codificarlo). Pero creo que podria ser de gran ayuda para ti. Saludos

Bajar Aquí
- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"

byway

Cita de: seba123neo en  3 Septiembre 2008, 04:08 AM
Novlucker  se refiere al identificador del programa,el ID del proceso

si tienes razon sabiendo el ID del proceso se le puede terminar pero ... la duda ahora es si este PID es el mismo en todas las pc donde se ejecuten ... osea si el mismo ejecutable obtiene la misma ID en otra pc ... si esto fuese asi no serviria de mucho... ademas me parece obtiene una Id de proceso de acuerdo al momento que se ejecuto... osea si se ejecuto despues de otro porceso o antes .. esa PID no sera la misma..

o estoy ekivocado?


Salu2.

Mr pom0

Cita de: byway en  3 Septiembre 2008, 03:25 AM
si ese es el caso puedes trabajar con el nombre de la ventana activa ... y finalizar el proceso correspondiente... no toma en cuenta el nombre del exe... solo el nombre de la ventana .. lo cual seria lo mejor .. coimo sabras eso no pueden cambiarle a menos que lo editen con algun resoucer o edit hex.

Option Explicit

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 Function TerminateProcess Lib "kernel32" _
(ByVal hProcess As Long, ByVal uExitCode As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject _
As Long) As Long

Private Declare Function GetWindowThreadProcessId Lib "user32" _
   (ByVal hwnd As Long, lpdwProcessId As Long) As Long

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

Const PROCESS_TERMINATE = &H1
Const PROCESS_QUERY_INFORMATION = &H400
Const STILL_ACTIVE = &H103

Public Sub CerrarProceso(TítuloVentana As String)
Dim hProceso As Long
Dim lEstado As Long
Dim idProc As Long
Dim winHwnd As Long

winHwnd = FindWindow(vbNullString, TítuloVentana)
If winHwnd = 0 Then
    Exit Sub
End If
Call GetWindowThreadProcessId(winHwnd, idProc)

' Obtenemos el handle al proceso
hProceso = OpenProcess(PROCESS_TERMINATE Or _
PROCESS_QUERY_INFORMATION, 0, idProc)
If hProceso <> 0 Then
    ' Comprobamos estado del proceso
    GetExitCodeProcess hProceso, lEstado
    If lEstado = STILL_ACTIVE Then
    ' Cerramos el proceso
        If TerminateProcess(hProceso, 9) <> 0 Then
         
        'Else
         
        End If
    End If
    ' Cerramos el handle asociado al proceso
    CloseHandle hProceso
Else

End If
End Sub



y lo llamas asi:

CerrarProceso ("titulo_de_la_ventana")


para obtener el titulo de la ventana basta con ver el admin de tareas (aplicaciones ).

Salu2.


oye una pregunta este codigo  se puede usar en VB 2008 lo que pasa es que lo puse pero me marca un error de violacion dememoria