Borland C++ Builder VCL FAQ - Как получить список активных процессов?

ОГЛАВЛЕНИЕ


Как получить список активных процессов?

Для получения списка активных процессов воспользуйтесь следующей функцией:
//--------------------------------------------------------------------------- 
// Получить список активных просессов
// возврат: заполняет список информацией вида
// Win2k
// [SYSTEM PROCESS]
// SYSTEM
// SERVICES.EXE
// MIRANDA32.EXE
// BCB.EXE
//
// Win98
// C:\WINDOWS\SYSTEM\KERNEL32.DLL
// C:\WINDOWS\SYSTEM\MSGSRV32.EXE
// C:\WINDOWS\SYSTEM\SPOOL32.EXE
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#include <tlhelp32.hpp>

PACKAGE void __fastcall GetActiveAppList (TStringList *slist)
{
if (!slist) return;

slist->Clear();

TProcessEntry32 prj;
prj.dwSize = sizeof(PROCESSENTRY32);

HANDLE hss = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
if (((int)(hss)) == (-1)) return;

AnsiString fname;
try {
for (bool loop = Process32First(hss, &prj); loop; loop = Process32Next(hss, &prj))
{ fname = AnsiString(prj.szExeFile).Trim().UpperCase();
if (fname.IsEmpty()) continue;
slist->Add(fname);
}
} // try
catch (...) { slist->Clear(); }

CloseHandle(hss);
}

//---------------------------------------------------------------------------

void __fastcall TF_Main::BitBtn1Click(TObject *Sender)
{
TStringList *slist = new TStringList();
try { GetActiveAppList(slist); Mem_Info->Lines->Text = slist->Text; }
__finally { delete slist; }
}
//---------------------------------------------------------------------------