SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Taquión en Martes 10 de Marzo de 2009, 19:05

Título: Pausar (o parar) un proceso
Publicado por: Taquión en Martes 10 de Marzo de 2009, 19:05
Hola a todos!

A ver si alguien me pudiese contestar...

Desde un programa controlo la memoria ram de un proceso (externo al proceso de ese programa). Necesito "pausar" el proceso externo cuando mi programa detecte en la memoria ram cierto valor. No sé si es posible "pausar" un proceso en windows, y si fuese posible, que se recupere después... ¿es posible? si es así ¿cómo?

Gracias.
Título: Re: Pausar (o parar) un proceso
Publicado por: Eternal Idol en Martes 10 de Marzo de 2009, 19:15
En Windows la unidad de ejecucion es el hilo, por lo tanto tenes que suspender todos los hilos de un proceso usando SuspendThread (http://msdn.microsoft.com/en-us/library/ms686345(VS.85).aspx) despues podes resumirlos perfectamente usando ResumeThread (http://msdn.microsoft.com/en-us/library/ms685086(VS.85).aspx).
Título: Re: Pausar (o parar) un proceso
Publicado por: Taquión en Martes 10 de Marzo de 2009, 23:53
Muchísimas gracias por tu rápidez y concisión.

Lo he probado... y el proceso no se me ha parado, quiero decir, que a la vista, el programa no ha detenido su ejecución. Te paso el código que he desarrollado para que me digas (si puedes y tienes ganas) si el fallo está en el código, o que estas funciones no me van a servir para lo que yo quiero...

Muchas gracias, de antemano.

Citar
#include <stdio.h>
#include <windows.h>
#include <string.h>
int main()
{
HANDLE h;
HWND TAhWnd = FindWindow(NULL, "nombreprocesoventana");
DWORD PID;
GetWindowThreadProcessId(TAhWnd, &PID);
h=OpenProcess(PROCESS_ALL_ACCESS,FALSE,PID);
printf ("Pulsa intro para parar proceso");
getchar();
SuspendThread(h);
printf ("Pulsa intro para continuar proceso");
getchar();
ResumeThread(h);
 return 0;
}
Título: Re: Pausar (o parar) un proceso
Publicado por: Eternal Idol en Miércoles 11 de Marzo de 2009, 08:06
Es logico, h es un HANDLE de un proceso no de un hilo, tenes que usar OpenThread. Para conseguir los hilos de un proceso podes usar estas funciones: CreateToolhelp32Snapshot, Thread32First y Thread32Next. Consulta la MSDN (http://msdn.microsoft.com/) para encontrar su documentacion.
Título: Re: Pausar (o parar) un proceso
Publicado por: Taquión en Miércoles 11 de Marzo de 2009, 08:25
Antes de colgar el código, pose OpenThread en vez de OpenProcess, pero el compilador me daba error (no encuentra la función). La librería de OpenThread es Windows.h, y la tenía puesta... no sabía qué hacer y puse OpenProcess. ¿Porqué me da fallo OpenThread?
Título: Re: Pausar (o parar) un proceso
Publicado por: Eternal Idol en Miércoles 11 de Marzo de 2009, 09:38
Esta funcion solo esta disponible desde Windows 2000 en adelante, creo que poniendo esto antes de incluir windows.h te funcionara:
#define _WIN32_WINNT 0x0500

PD. Igual tenes que enumerar los hilos para poder suspenderlos.
Título: Re: Pausar (o parar) un proceso
Publicado por: Taquión en Miércoles 11 de Marzo de 2009, 10:37
Ok, lo probaré esta tarde y ya te comentaré. Muchas gracias por tu ayuda tab buena y rápida.

Gracias!