elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] Funciones para manejar procesos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C] Funciones para manejar procesos  (Leído 2,726 veces)
.::DoX::.

Desconectado Desconectado

Mensajes: 4



Ver Perfil
[C] Funciones para manejar procesos
« en: 7 Octubre 2011, 02:20 am »

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  :P.

Procesos.h:

Código
  1. #ifndef __PROCESOS__
  2. #define __PROCESOS__
  3.  
  4. #include <windows.h>
  5. #include <tlhelp32.h>
  6.  
  7. int EnumProc();
  8. char **ListarProc();
  9. int obtPid(char* Proc);
  10. int TerminarProc(char* Proc);
  11.  
  12. #endif

Procesos.cpp

Código
  1. /*
  2. Autor: .::DoX::.
  3. Fecha: 06/10/2011 - 06:00 PM
  4. */
  5.  
  6. #include "Procesos.h"
  7. #include <stdlib.h>
  8. #include <string.h>
  9.  
  10. void wCharToChar(WCHAR *wchar, char* dest);
  11.  
  12. int EnumProc()
  13. {
  14. int i = -1;
  15. HANDLE hSnap;
  16. PROCESSENTRY32 Proceso;
  17.  
  18. hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  19. Proceso.dwSize = sizeof(PROCESSENTRY32);
  20. Process32First(hSnap, &Proceso);
  21. do { i++; }while(Process32Next(hSnap, &Proceso));
  22. CloseHandle(hSnap);
  23.  
  24. return i;
  25. }
  26.  
  27. char **ListarProc()
  28. {
  29. char** tmp;
  30. char aux[260];
  31. int i = 0;
  32. HANDLE hSnap;
  33. PROCESSENTRY32 Proceso;
  34.  
  35. hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  36. Proceso.dwSize = sizeof(PROCESSENTRY32);
  37. Process32First(hSnap, &Proceso);
  38.  
  39. tmp = (char**)malloc(sizeof(char*) * EnumProc());
  40.  
  41. do{
  42. wCharToChar(Proceso.szExeFile, aux);
  43. tmp[i] = (char*)malloc(sizeof(char) * strlen(aux) + 1);
  44. strcpy(tmp[i], aux);
  45. i++;
  46. }while(Process32Next(hSnap, &Proceso));
  47. CloseHandle(hSnap);
  48.  
  49. return tmp;
  50. }
  51.  
  52. void wCharToChar(WCHAR *wchar, char* dest)
  53. {
  54. while(*wchar != '\0')
  55. *dest++ = (char)*wchar++;
  56. *dest = '\0';
  57. }
  58.  
  59. int obtPid(char* Proc)
  60. {
  61.  
  62. HANDLE hSnap;
  63. PROCESSENTRY32 Proceso;
  64. char tmp[260];
  65.  
  66. hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  67. Proceso.dwSize = sizeof(PROCESSENTRY32);
  68. Process32First(hSnap, &Proceso);
  69.  
  70. do {
  71.  
  72. wCharToChar(Proceso.szExeFile, tmp);
  73.  
  74. if (!strcmp(tmp, Proc))
  75. {
  76. CloseHandle(hSnap);
  77. return Proceso.th32ProcessID;
  78. }
  79.  
  80. } while(Process32Next(hSnap, &Proceso));
  81.  
  82. CloseHandle(hSnap);
  83. return 0;
  84. }
  85.  
  86. int TerminarProc(char* Proc)
  87. {
  88.  
  89. HANDLE hProc;
  90. int Pid = obtPid(Proc);
  91.  
  92. hProc = OpenProcess(PROCESS_TERMINATE, 0, Pid);
  93. if (hProc)
  94. {
  95. if (TerminateProcess(hProc, 0))
  96. {
  97. CloseHandle(hProc);
  98. return 1;
  99. }
  100. }
  101.  
  102. CloseHandle(hProc);
  103. return 0;
  104.  
  105. }


Ejemplo de uso:

Código
  1. #include "Procesos.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int main()
  6. {
  7. char **a;
  8.  
  9. a = ListarProc();
  10.  
  11. for (int i=0; i<=EnumProc(); i++)
  12. printf("%d - Name: %s - PID: %d\n", i, a[i], obtPid(a[i]));
  13.  
  14. ShellExecuteA(0, NULL, "C:\\Windows\\notepad.exe", NULL, NULL, 1);
  15. Sleep(1000);
  16.  
  17. if (TerminarProc("notepad.exe"))
  18. printf("\nEl proceso se termino con exito!");
  19. else
  20. printf("Hubo un error al terminar el proceso!");
  21.  
  22. return 0;
  23. }

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


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: [C] Funciones para manejar procesos
« Respuesta #1 en: 7 Octubre 2011, 09:05 am »

malloc sin free = memory leak.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
dewolo

Desconectado Desconectado

Mensajes: 83


Ver Perfil
Re: [C] Funciones para manejar procesos
« Respuesta #2 en: 7 Octubre 2011, 14:50 pm »

puede ser que NEW y DELETE llaman por debajo a malloc y free, me parecio haber visto eso en el depurador ....

muy weno el codes pero ponele free , mas si haces mallocs dentro de un bucle con lo cual se asigna memoria continuamente y nunca se libera y el proceso se agranda mucho, aparte cuando cerras el proceso se prduce una excepcion y el sistema operativo lo debe liberar me parece  :xD
En línea

Queta

Desconectado Desconectado

Mensajes: 267



Ver Perfil
Re: [C] Funciones para manejar procesos
« Respuesta #3 en: 7 Octubre 2011, 17:57 pm »

Los operadores new y delete son exclusivos de C++.

http://www.cplusplus.com/doc/tutorial/dynamic/
En línea

"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿que es mejor para manejar mysql?
Bases de Datos
morenochico 8 10,087 Último mensaje 11 Marzo 2011, 07:54 am
por morenochico
¿Manual para manejar procesos en C?
Programación C/C++
Dark Invader 6 7,905 Último mensaje 14 Julio 2011, 22:46 pm
por El_Java
Librería para manejar celdas en android???
Java
imaginawireless 0 1,668 Último mensaje 20 Mayo 2012, 20:22 pm
por imaginawireless
glTest2: Formato RGBA para manejar colores
Programación C/C++
85 1 2,275 Último mensaje 23 Octubre 2013, 15:54 pm
por macross255
ayuda para manejar tiempo
Programación Visual Basic
memoz08 0 1,458 Último mensaje 25 Julio 2013, 00:06 am
por memoz08
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines