2012-01-26 21 views
7

Bạn có thể sử dụng chương trình Process Explorer để xem có bao nhiêu trình điều khiển đang chạy ứng dụng. Có cách nào với mã Delphi để lấy số này không? Tôi quan tâm đến việc theo dõi số lượng cho bản thân ứng dụng; không tìm thấy số lượng xử lý được sử dụng bởi các ứng dụng khác như Process Explorer đang làm.Làm cách nào để đếm số lượng tay cầm đã mở thuộc về một quy trình nhất định?

Ý định của tôi là dành cho ứng dụng theo dõi/phát hiện rò rỉ tài nguyên có thể xảy ra.

Trả lời

12

Sử dụng chức năng GetProcessHandleCount. Hàm API này là trong các phiên bản gần đây của Delphi nhập khẩu bởi các Winapi.Windows đơn vị (do đó bạn có thể bỏ qua được trình bày một):

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

Hoạt động tốt. Tôi đã sử dụng điều này để phát hiện rò rỉ tài nguyên do không gọi 'Socket.Close()' khi xảy ra lỗi kết nối mạng. – AlainD