Bueno he estado aprendiendo a trabajar en C pero por cuestiones de tiempo lo habia dejado pero ahora que tuve tiempo hice estas simples funciones para manejar procesos de Windows para practicar y aprender .
Procesos.h:
Procesos.cpp
Ejemplo de uso:
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
Procesos.h:
Código (c) [Seleccionar]
#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 (c) [Seleccionar]
/*
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);
tmp = (char**)malloc(sizeof(char*) * EnumProc());
do{
wCharToChar(Proceso.szExeFile, aux);
tmp[i] = (char*)malloc(sizeof(char) * strlen(aux) + 1);
strcpy(tmp[i], 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);
if (!strcmp(tmp, Proc))
{
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 (c) [Seleccionar]
#include "Procesos.h"
#include <stdio.h>
#include <stdlib.h>
int main()
{
char **a;
a = ListarProc();
for (int i=0; i<=EnumProc(); i++)
printf("%d - Name: %s - PID: %d\n", i, a[i], obtPid(a[i]));
ShellExecuteA(0, NULL, "C:\\Windows\\notepad.exe", NULL, NULL, 1);
Sleep(1000);
if (TerminarProc("notepad.exe"))
printf("\nEl proceso se termino con exito!");
else
printf("Hubo un error al terminar el proceso!");
getchar();
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