SoloCodigo
Programación General => C/C++ => Mensaje iniciado 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.
-
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).
-
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.
#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;
}
-
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.
-
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?
-
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.
-
Ok, lo probaré esta tarde y ya te comentaré. Muchas gracias por tu ayuda tab buena y rápida.
Gracias!