Hola,
puedes crear una captura con los procesos activos en un intervalo de tiempo (p.ej cada minuto), obtienes una lista con los procesos abiertos, al minutos, haces una segunda captura de los procesos activos y comparas las dos listas, podrás saber si hay procesos nuevos o procesos terminados.
Función para obtenerlos procesos activos
Añade 'TLHelp32' en el uses de tu form
Pon una TListBox (ListBox1) y un TButton (Button1) en tu form
Pon este código en el OnClick de Button1:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
function SacaExe(MangoW:HWND):string;
var
Datos :TProcessEntry32;
hID : DWord;
Snap : Integer;
begin
GetWindowThreadProcessId(MangoW,@hID);
Snap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
try
Datos.dwSize:=SizeOf(Datos);
if(Process32First(Snap,Datos))then
begin
repeat
if Datos.th32ProcessID=hID then
begin
Result:=StrPas(Datos.szExeFile);
Break;
end;
until not(Process32Next(Snap,Datos));
end;
finally
Windows.CloseHandle(Snap);
end;
end;
function ObtieneVentanas(Mango: HWND;
Nada: Pointer): Boolean; stdcall;
var
sTemp:string;
begin
Result := True;
sTemp:=SacaExe(Mango);
with Form1.ListBox1.Items do
if IndexOf(sTemp) = - 1 then Add(sTemp);
end;
begin
EnumWindows( @ObtieneVentanas, 0 );
end;
Espero te sirva de ayuda.
Saludos