2012-01-26 7 views
7

È possibile utilizzare il programma Process Explorer per vedere quanti handle eseguono le applicazioni. C'è un modo con il codice Delphi per ottenere questo numero? Sono interessato a rintracciare il numero per l'applicazione stessa; non trovare il numero di handle utilizzati da altre applicazioni come sta facendo Process Explorer.Come ottenere il conteggio delle maniglie aperte che appartengono a un determinato processo?

La mia intenzione è che l'applicazione tenga traccia/rilevi possibili perdite di risorse.

risposta

12

Utilizzare la funzione GetProcessHandleCount. Questa funzione API è nelle versioni recenti di Delphi importati dalla Winapi.Windows unità (così è possibile omettere il presentato uno):

function GetProcessHandleCount(hProcess: THandle; var pdwHandleCount: DWORD): BOOL; stdcall; 
    external 'kernel32.dll'; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    HandleCount: DWORD; 
begin 
    if GetProcessHandleCount(GetCurrentProcess, HandleCount) then 
    ShowMessage('Handle count: ' + IntToStr(HandleCount)); 
end; 
+1

funziona bene. L'ho usato per rilevare perdite di risorse causate dal non chiamare 'Socket.Close()' quando si verifica un errore di connessione di rete. – AlainD