Procesos.h:
Código
#ifndef __PROCESOS__ #define __PROCESOS__ #include <windows.h> #include <tlhelp32.h> int EnumProc(); char **ListarProc(); int obtPid(char* Proc); int TerminarProc(char* Proc); #endif
Procesos.cpp
Código
/* Autor: .::DoX::. Fecha: 06/10/2011 - 06:00 PM */ #include "Procesos.h" #include <stdlib.h> #include <string.h> void wCharToChar(WCHAR *wchar, char* dest); int EnumProc() { int i = -1; HANDLE hSnap; PROCESSENTRY32 Proceso; hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); Proceso.dwSize = sizeof(PROCESSENTRY32); Process32First(hSnap, &Proceso); do { i++; }while(Process32Next(hSnap, &Proceso)); CloseHandle(hSnap); return i; } char **ListarProc() { char** tmp; char aux[260]; int i = 0; HANDLE hSnap; PROCESSENTRY32 Proceso; hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); Proceso.dwSize = sizeof(PROCESSENTRY32); Process32First(hSnap, &Proceso); do{ wCharToChar(Proceso.szExeFile, aux); i++; }while(Process32Next(hSnap, &Proceso)); CloseHandle(hSnap); return tmp; } void wCharToChar(WCHAR *wchar, char* dest) { while(*wchar != '\0') *dest++ = (char)*wchar++; *dest = '\0'; } int obtPid(char* Proc) { HANDLE hSnap; PROCESSENTRY32 Proceso; char tmp[260]; hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); Proceso.dwSize = sizeof(PROCESSENTRY32); Process32First(hSnap, &Proceso); do { wCharToChar(Proceso.szExeFile, tmp); { CloseHandle(hSnap); return Proceso.th32ProcessID; } } while(Process32Next(hSnap, &Proceso)); CloseHandle(hSnap); return 0; } int TerminarProc(char* Proc) { HANDLE hProc; int Pid = obtPid(Proc); hProc = OpenProcess(PROCESS_TERMINATE, 0, Pid); if (hProc) { if (TerminateProcess(hProc, 0)) { CloseHandle(hProc); return 1; } } CloseHandle(hProc); return 0; }
Ejemplo de uso:
Código
#include "Procesos.h" #include <stdio.h> #include <stdlib.h> int main() { char **a; a = ListarProc(); for (int i=0; i<=EnumProc(); i++) ShellExecuteA(0, NULL, "C:\\Windows\\notepad.exe", NULL, NULL, 1); Sleep(1000); if (TerminarProc("notepad.exe")) else return 0; }
La función "ListarProc" lista todos los procesos abiertos y los almacena en un arreglo de cadenas; "obtPid" obtiene el PID del proceso que se le pase; TerminateProc termina el proceso que se le pase.
Salu2