Сборник часто задаваемых вопросов по программированию в среде Borland C++ Builder

           

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



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

Ответ : Получить список запущенных задач: имена их файлов и 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 } --------------------------------------------------------------------------------

Содержание раздела