Condividi:        

sospendere/riattivare un programma in Windows 98

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Anthony47, Triumph Of Steel, archimede

sospendere/riattivare un programma in Windows 98

Postdi danrevella » 19/07/18 17:48

Salve a tutti!!
Congelare e riattivare un programma sembra una cosa piuttosto semplice con i nuovi sistemi operativi, ma io ho bisogno di compiere questo task sotto Windows 98.
Ho provato con questo codice, ma non funziona....
Qualcuno ha qualche idea che possa aiutarmi, grazie?
Codice: Seleziona tutto
// freeze98.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
//maurizio
#include "windows.h"
#include <tlhelp32.h>
#include <iostream>
using std::cout;
using std::endl;
//maurizio

int main(int argc, char* argv[])
{
   int codeclef=35;
   bool PrimaVolta;     //global variable
   HWND Handle_Win_Game;//this is a GLOBAL variable
   HWND MainWnd;
   unsigned long dwProcessIdgame;
   PrimaVolta=true;

   //   VK_MULTIPLY corrisponde al * del tast.numerico
   //   codeclef==35 corrisponde al tasto END
   Sleep (2000);
   while (GetAsyncKeyState(codeclef) == 0)
   { /* attendi e basta!!!*/   }

   if (PrimaVolta == true)
      //ovvero: una volta che si e' attivato il debugger
      //non si puo' piu' cambiare idea!!!!
      {
      PrimaVolta=false;   
      //Ottengo l'handle alla finestra del gioco
       //che sta attualmente girando
      Handle_Win_Game=::GetForegroundWindow();
         ///Aggiunta per il debugger
      MainWnd=::GetForegroundWindow();
      //Qui otteniamo il PID del gioco
      //Questa funzione ritorna un TID (identificativo del
      //thread, che comunque non e' un handle, che ha creato
      //la finestra il cui handle e' stato specificato), e
      //l'indirizzo della stringa definita nel 2^ parametro
      //viene riempito con il PID del processo che ha creato
      //la finestra; tutti e due i valori sono riportati
      // sotto forma di DWORD
      //unsigned long dwProcessIdgame;

      ::GetWindowThreadProcessId(Handle_Win_Game,&dwProcessIdgame);
      //MessageBox("premuta hotkey");      
      //A questo punto se tutto e' filato liscio, la variable
      //dwProcessIdgame contiene il PID del gioco
      
      //PrimaVolta = true;
   
      ::SetFocus(Handle_Win_Game);
      ::SetForegroundWindow(Handle_Win_Game);
      ::ShowWindow(Handle_Win_Game,SW_SHOWMINIMIZED);
      ::ShowWindow(Handle_Win_Game,SW_SHOWMAXIMIZED);
      ::ShowWindow(Handle_Win_Game,SW_RESTORE);
      ::ShowWindow(Handle_Win_Game,SW_SHOW);
      ::SetFocus(Handle_Win_Game);
      ::SetForegroundWindow(Handle_Win_Game);

      DWORD TargetPid = dwProcessIdgame;
      DebugActiveProcess(TargetPid);

      //   VK_MULTIPLY corrisponde al * del tast.numerico
      while (GetAsyncKeyState(VK_MULTIPLY) == 0);
      { /* attendi e basta!!!*/   }

HANDLE hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if (hThreadSnap  != INVALID_HANDLE_VALUE)
{
    THREADENTRY32 te;
    te.dwSize = sizeof(te);
    if (Thread32First(hThreadSnap , &te))
    {
        do
        {
            //in THREADENTRY32 structure there is a member called th32OwnerProcessID
            //you can check owner process of thread like this:
            if (te.th32OwnerProcessID == TargetPid)
            {
            cout << te.th32ThreadID <<"\n" ;
     // printf( TEXT("\n     base priority  = %d"), te32.tpBasePri );
      //printf( TEXT("\n     delta priority = %d"), te32.tpDeltaPri );

         //HANDLE ThreadToResume = te.th32ThreadID;
               //ResumeThread(ThreadToResume); // then resume thread
            ResumeThread((HANDLE) te.th32ThreadID); // then resume thread
            //wprintf(L"Process %u IdThred=%u\n", te.th32OwnerProcessID, te.th32ThreadID);
            }
        } while (Thread32Next(hThreadSnap , &te));
    }
    CloseHandle(hThreadSnap );
}


   };//end if (PrimaVolta == true)
   //}//end while (GetAsyncKeyState(codeclef) == 0)
   return 0;
}
danrevella
Utente Junior
 
Post: 27
Iscritto il: 27/10/03 18:35

Sponsor
 

Postdi m.paolo » 19/07/18 19:31

Windows 98? E chi ce l'ha ancora? Spero che qualcuno ti possa essere comunque di aiuto.
m.paolo
Moderatore
 
Post: 4251
Iscritto il: 11/11/06 22:34

Postdi danrevella » 19/07/18 19:49

m.paolo ha scritto:Windows 98? E chi ce l'ha ancora? Spero che qualcuno ti possa essere comunque di aiuto.

Ovviamente lo uso in un emulatore che mi ricorda i vecchi tempi ;-)
danrevella
Utente Junior
 
Post: 27
Iscritto il: 27/10/03 18:35


Torna a Programmazione


Topic correlati a "sospendere/riattivare un programma in Windows 98":


Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti