Ver Mensaje Individual
  #4  
Antiguo 29-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
No tengo el builder instalado, lo mas parecido que tengo para programar en C es el MinGW, pero no debería de ser muy diferente. La cosa quedaría así:
Código:
void MatarProceso(char nombre[])
{
 DWORD lista[1024];
 HANDLE proceso;
 char buffer[MAX_PATH + 1];
 DWORD l;
 int i;
 
 if (!EnumProcesses(lista, sizeof(lista), &l))
   return;
 l = l / sizeof(DWORD); 
 for ( i = 0; i<l; i++ )
 {
  proceso = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ 
                        | PROCESS_TERMINATE,FALSE,lista[i]);
  if (proceso != NULL)
  { 
   if (GetModuleFileNameEx(proceso,NULL,buffer,sizeof(buffer)-1))
   {
    if (strcasecmp(buffer,nombre)==0)
      TerminateProcess(proceso,0);      
   }    
   CloseHandle( proceso );               
  }
 }
}
Se utilizaría de esta manera:
Código:
  MatarProceso("C:\\Windows\\System32\\Notepad.exe");
Puede que tengas que añadir alguna librería para usar las funciones EnumProcesses y OpenProcess, en MinGW el header se llama psapi.h y la libreria libpsapi.a supongo que en el Builder tendrán nombres parecidos.

De todas formas si tu creas el proceso y luego quieres destruirlo, deberías pensar en utilizar la función CreateProccess que además de iniciar el proceso nos devuelve sus identificador que luego podemos usar para matarlo.
Responder Con Cita