• Sábado 9 de Noviembre de 2024, 03:38

Autor Tema:  Pausar (o parar) un proceso  (Leído 1936 veces)

Taquión

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Pausar (o parar) un proceso
« en: Martes 10 de Marzo de 2009, 19:05 »
0
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.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Pausar (o parar) un proceso
« Respuesta #1 en: Martes 10 de Marzo de 2009, 19:15 »
0
En Windows la unidad de ejecucion es el hilo, por lo tanto tenes que suspender todos los hilos de un proceso usando SuspendThread despues podes resumirlos perfectamente usando ResumeThread.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Taquión

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Pausar (o parar) un proceso
« Respuesta #2 en: Martes 10 de Marzo de 2009, 23:53 »
0
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;
}

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Pausar (o parar) un proceso
« Respuesta #3 en: Miércoles 11 de Marzo de 2009, 08:06 »
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 para encontrar su documentacion.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Taquión

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Pausar (o parar) un proceso
« Respuesta #4 en: Miércoles 11 de Marzo de 2009, 08:25 »
0
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?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Pausar (o parar) un proceso
« Respuesta #5 en: Miércoles 11 de Marzo de 2009, 09:38 »
0
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.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Taquión

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Pausar (o parar) un proceso
« Respuesta #6 en: Miércoles 11 de Marzo de 2009, 10:37 »
0
Ok, lo probaré esta tarde y ya te comentaré. Muchas gracias por tu ayuda tab buena y rápida.

Gracias!