Newsgroup: it.comp.lang.delphi
Titolo: Processi

Ciao a tutti e grazie per aver letto il mex .
Vorrei fare un programmino che killi dei processi.
Il programma dovrebbe essere senza interfaccia
e dovrebbe killare il processe che viene lui passato tramite command-line
tipo
kill.exe 5
killa il 5 processo.
Ora:Vorrei ottenere un elenco dei processi.
mi pare che bisogni usare le ToolHelp (questo lo sa Andrea Magni ahha)
bene.
per terminare il processo uso la TerminateProcess.
ok
Qualcuno ( e specialmente Magni che in queste cose è il Boss )
sa aiutarmi con un miniesempio come ottenere questa lista ?
(nella lista vorrei il nome del processo e l'handle , non mi servono altri
dati)
Ho provato ad arrangiarmi da solo ma veramente ultimamente ho pochissimo
tempo
ed è anche una robettina un pò complicata (almeno per me)
Mi serve un esempiooo
Grazie 1000 Ciao Ciao

Mmmm, suona tipo il kill di Linux o sbaglio ?
-Ops! non so risponderere comunque !! I'm sorcy !-
Ciao, Davide DG

Garet ha scritto nel messaggio ...

Ciao Garet.
Prova ad usare questo mio programma.
"Dovrebbe" funzionare.
Su windows 95/98 funziona bene.
Su windows NT/2000 non ne ho idea.
Come al solito, quando posto programmi del genere aggiungo la solita
manfrina...
"Io non sono responsabile di danni causati direttamente o indirettamente
dell'uso di questo programma".
"Il prodotto non è testato per funzionare in tutte le condizioni. Lo usate a
vostro rischio e pericolo".
Detto questo aggiungo una postilla De'Paperoni (quelle piccole piccole che
si leggono con il microscopio elettronico...) io l'ho usato diverse volte e
ha funzionato.
Se stavate per concludere un programma rivoluzionario da far invidia a
Microsoft e avete per errore killato il kernel, perdendo tutto, io vi ho
avvertito... :)
Non usa form.
Copiate il listato in un file vuoto di nome Killproc.dpr.
Impostate "Generate console application".
Compilate.
Dimensione dell'eseguibile 43Kbyte...
Program Killproc;
uses windows,TLHELP32,sysutils;
procedure visualize_help;
begin
writeln('Utilizzo:');
writeln('Prima visualizza la lista dei processi attivi in windows con
"/V"');
writeln('Poi usa "/T x" per terminare il processo dove x e''
l''identificativo del processo (prima colonna)');
halt;
end;
procedure visualize_process;
var t:thandle;
    i:tagPROCESSENTRY32;
    y:integer;
function slength(s:string;l:integer):string;
begin
while length(s)<l do s:=s+#32;
setlength(s,l);
result:=s;
end;
begin
t:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,GetCurrentProcessId);
i.dwSize:=sizeof(i); // !importantissimo!
process32first(t,i);
y:=0;
while getlasterror<>ERROR_NO_MORE_FILES do
  begin
   if y=0 then writeln(slength('ProcessID',11)+'| '+slength('Nome
eseguibile',20)+'| '+'ID modulo');
   inc(y);
   writeln(slength(inttostr(i.th32ProcessID),11)+'|
'+slength(extractfilename(i.szExeFile),20)+'|
'+inttostr(i.th32ModuleID),12);
   if y=22 then
    begin
     writeln('Premere invio per continuare');
     readln;
     y:=0;
    end;
   process32next(t,i);
  end;
closehandle(t);  // chiudere sempre tutti gli Handle che non si usano +!
end;
procedure terminate_process;
var t,a:thandle;
    i:tagPROCESSENTRY32;
begin
t:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,GetCurrentProcessId);
i.dwSize:=sizeof(i); // !importantissimo!
process32first(t,i);
while getlasterror<>ERROR_NO_MORE_FILES do
  begin
   if (inttostr(i.th32ProcessID)=paramstr(2))then
    begin
     // apro il processo con tutti i privilegi
     writeln('Processo trovato');
     a:=OpenProcess(PROCESS_ALL_ACCESS,true,i.th32ProcessID);
     if not Terminateprocess(a,error) then
      writeln('Terminazione forzata fallita!')
     else writeln('Terminazione forzata riuscita con successo');
    end;
   process32next(t,i);
  end;
closehandle(t);  // chiudere sempre tutti gli Handle che non si usano +!
end;
begin
if paramcount=0 then visualize_help;
if length(paramstr(1))<2 then visualize_help;
case paramstr(1)[2] of
  'v','V': begin
            visualize_process;
           end;
  't','T': begin
            terminate_process;
            if paramcount<>2 then visualize_help;
           end;
else visualize_help;
end
end.
Ciao
Matteo