// Для перечисления используется функция EnumProcess из psapi.dll
int ListProcesses(void)
{
typedef BOOL (CALLBACK* LPF_B_pD_D_pD)(DWORD *, DWORD, DWORD *);
LPF_B_pD_D_pD pEnumProcesses;
DWORD aProcesses[1024], cbNeeded, cProcesses;
DWORD i;
HMODULE PsapiHND;// handler to used library
PsapiHND = LoadLibrary("psapi.dll");
if (!PsapiHND ) return -1;
cProcesses=0;
pEnumProcesses = (LPF_B_pD_D_pD) GetProcAddress(PsapiHND, "EnumProcesses");
if (pEnumProcesses)
if (pEnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ))
{
cProcesses = cbNeeded / sizeof(DWORD);
for ( i = 0; i < cProcesses; i++ )
{
// можно написать функцию, обрабатывающую каждый процесс:
// ForEachProcess(aProcesses[i]);
// или использовать массив строк:
// Здесь я не уверен
что-то[i] = GetModuleFileName(aProcesses[i]);
}
}
// cleanup
if (PsapiHND) { if (FreeLibrary(PsapiHND)) PsapiHND = NULL; }
return cProcesses;
}
|