Вопрос: Как получить список запущенных задач?

Ответ :

Получить список запущенных задач: имена их файлов и PID, можно так: 

code:
--------------------------------------------------------------------------------

//#define SpyWinNT //Для WinNT
#ifdef SpyWinNT
#include <psapi.h>
#else //Win98, Win2000,...
#include <tlhelp32.h>
#endif

#ifdef SpyWinNT
typedef struct tagPROCNAMEID

{
  DWORD ProcessID;
  char szProcessName[MAX_PATH];
}PROCNAMEID;
#endif


TList *TaskList=NULL;

void GetWinTask()
{
#ifdef SpyWinNT
PROCNAMEID pn;
PROCNAMEID *lpn;
#else
HANDLE hSnapshot;
PROCESSENTRY32 pe;
PROCESSENTRY32 *lpe;
#endif

DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;

BOOL result;
int n=0;
   if(TaskList==NULL)TaskList=new TList;
   for(i=0; i < (DWORD)TaskList->Count; i++)
   {
#ifdef SpyWinNT
     if(TaskList->Items[i])delete (PROCNAMEID *)TaskList->Items[i];
#else
     if(TaskList->Items[i])delete (PROCESSENTRY32 *)TaskList->Items[i];
#endif
   }
   TaskList->Clear();
#ifdef SpyWinNT
   n=0;
    if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
        return;
    // Calculate how many process identifiers were returned.

    cProcesses = cbNeeded / sizeof(DWORD);

    // Print the name and process identifier for each process.

    for ( i = 0; i < cProcesses; i++ )
    {
          // Get a handle to the process.
      HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
                                     PROCESS_VM_READ,
                                     FALSE, aProcesses[i] );
    // Get the process name.
       if ( hProcess )
       {
         HMODULE hMod;
         DWORD cbNeeded;
         if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
             &cbNeeded) )

         {
           lpn =new PROCNAMEID;
           lpn->ProcessID=aProcesses[i];
            GetModuleBaseName( hProcess, hMod,lpn->szProcessName,
                               sizeof(lpn->szProcessName) );
           TaskList->Add(lpn);
           n++;
         }
       }
       CloseHandle( hProcess );
    }

#else //Win2000

    i=0;
    hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    if(hSnapshot !=INVALID_HANDLE_VALUE)
    {
      pe.dwSize=sizeof(PROCESSENTRY32);
      result=Process32First(hSnapshot, &pe);
      while(result)
      {
        lpe =new PROCESSENTRY32;
        memcpy(lpe,&pe,sizeof(PROCESSENTRY32));
        TaskList->Add(lpe);
           i++;
        result=Process32Next(hSnapshot, &pe);
      }
    }

#endif

}



--------------------------------------------------------------------------------

	

Электронные Книги по компьютерным программам
На правах рекламы:
Логин
Пароль
Запомнить меня