Pausar la ejecucion de un programa

Iniciado por EstoyBaneado, 4 Junio 2005, 20:15 PM

0 Miembros y 1 Visitante están viendo este tema.

EstoyBaneado

Me gustaria muchuchusisimo saber si se puede "pausar" o detener temporalmente la ejecucion de un programa y cual es la Api q lo hace. Para q no se malentienda, quiero pausar desde mi programa en vb, otro programa externo.

gracias de antemano.
Fui baneado por decir lo que pienso...
No importa, rezare por uds... y eso que soy ateo xD

Ertai

Algo tipo Olly o Softice?  :o :o

Lo veo dificil.

Saludos,
Ertai
Si la felicidad se comprara, entonces el dinero sería noble.


void rotar_by_ref(int& a, int& b) {
   /* Quien dijo que no se podia sin una variable temporal? */
   *a = *a ^ *b;
   *b = *a ^ *b;
   *a = *a ^ *b;
}

Slasher-K

No se pueden pausar aplicaciones sino threads. Para pausar una aplicación tenés que pausar su thread primario.

Para detener la ejecución de un subproceso (thread) se utiliza la función SuspendThread. Para volver a reanudar la ejecución se utiliza ResumeThread. Se puede llamar a la función SuspendThread las veces que se deseen pero luego hay que llamar a ResumeThread la misma cantidad de veces para que el subproceso continúe ejecutandose.

Saludos.



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*

EstoyBaneado

¿como puedo saber el handle del thread primario? porque segun vi, a la funcion suspendthread hay que pasarle como parametro el handle, pero yo solamente sé el ID del thread, y no me funca.
Sé que una manera seria abriendo el ID con la funcion OpenThread, pero esa funcion solo existe en WinXP.

¿Alguna Idea?

thx.
Fui baneado por decir lo que pienso...
No importa, rezare por uds... y eso que soy ateo xD

byebye

depura el proceso desde tu programa (debugactiveprocess), cuando DebugEventCode sea = a CREATE_PROCESS_DEBUG_EVENT tiras de CREATE_PROCESS_DEBUG_INFO que consta de estos datos:

typedef struct _CREATE_PROCESS_DEBUG_INFO { // cpdi 
    HANDLE hFile;
    HANDLE hProcess;
    HANDLE hThread; <--------------- aqui lo que buscas
    LPVOID lpBaseOfImage;
    DWORD dwDebugInfoFileOffset;
    DWORD nDebugInfoSize;
    LPVOID lpThreadLocalBase;
    LPTHREAD_START_ROUTINE lpStartAddress;
    LPVOID lpImageName;
    WORD fUnicode;
} CREATE_PROCESS_DEBUG_INFO;

Crashoverwrite

#5

Declare Function MsgWaitForMultipleObjects Lib "user32" _
(ByVal nCount As Long, pHandles As Long, ByVal fWaitAll As Long, _
ByVal dwMilliseconds As Long, ByVal dwWakeMask As Long) As Long
Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, _
ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long

Sub Main()

    Static t As Boolean
    If t <> True Then _
    SetTimer hwnd, 0, 1, AddressOf TimerProc: t = True
   
    SafeSleep (3600)
   
End Sub

Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
   
    ' EJECUCION EN SEGUNDO PLANO
   
   
    '///////////////////////////////////////////////////////
        ' [ CODE code ]:::::::::::::>>
    '///////////////////////////////////////////////////////
   
End Sub

Sub SafeSleep(ByVal inWaitSeconds As Single) 'PAUSA Y NO CARGA LA CPU!!!

Const WAIT_OBJECT_0 As Long = 0
Const WAIT_TIMEOUT As Long = &H102

Dim lastTick As Single
Dim timeout As Long
timeout = inWaitSeconds * 1000
lastTick = Timer

Do
Select Case MsgWaitForMultipleObjects(0, 0, False, timeout, 255)
Case WAIT_OBJECT_0
DoEvents
timeout = ((inWaitSeconds) - (Timer - lastTick)) * 1000
If timeout < 0 Then timeout = 0

Case Else
Exit Do

End Select

Loop While True

Main ' VUELVE AL PROCEDIMIENTO PRINCIPAL
   
End Sub

byebye

en ese codigo pausa otro proceso por algun sitio?

Slasher-K


Main ' VUELVE AL PROCEDIMIENTO PRINCIPAL


Esa linea va a provocar un desbordamiento de pila.

Saludos.



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*

kasiko

ummmmm  muy interesante el hilo  :o
Nos vemos...


EstoyBaneado

1) El code no anda.
2) Que se supone que hace? Un Sleep a mi propio proceso?
3) Crashoverwrite, eso es lo q hace el code, crashea. jaja.

salu!
Fui baneado por decir lo que pienso...
No importa, rezare por uds... y eso que soy ateo xD