Percebi um e-mail muito interessante sobre como listar os processos ativos no Windows e fiz uma rotina em cima.
Estou compartilhando pois realmente achei interessante.
function InformacoesSobreProcessos(out ListagemCSV: TStringList): Boolean;
function StatusDoProcesso(PID: DWORD): string;
var
retorno : Longint;
resultado : DWORD;
begin
Result := 'Indeterminado';
if (PID > 0) then
begin
retorno := SendMessageTimeout(PID,WM_NULL,0,0,SMTO_ABORTIFHUNG and SMTO_BLOCK,5000,resultado);
case retorno of
1 : Result := 'Em execução';
0 : Result := 'Não respondendo';
else Result := Format('%d?',[retorno]);
end;
end;
end;
procedure LocalizarProcessos;
var
controle : DWORD;
continuar : Boolean;
alca : THandle;
processo : TProcessEntry32;
begin
controle := 0;
alca := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
processo.dwSize := SizeOf(TProcessEntry32);
continuar := Process32First(alca,processo);
while (continuar) do
begin
controle := processo.th32ProcessID;
ListagemCSV.Add(Format('%s,%s',[processo.szExeFile,StatusDoProcesso(controle)]));
continuar := Process32Next(alca,processo);
end;
end;
begin
Result := False;
ListagemCSV.Clear;
LocalizarProcessos;
Result := True;
end;