Цитата
function BitToKB(bytes: Int64): string;
begin
if bytes < 1024 then
Result := IntToStr(bytes) + ' B'
else if bytes < 1048576 then
Result := FloatToStrF(bytes / 1024, ffFixed, 10, 1) + ' Kb'
else if bytes < 1073741824 then
Result := FloatToStrF(bytes / 1048576, ffFixed, 10, 1) + ' Mb'
else if bytes > 1073741824 then
Result := FloatToStrF(bytes / 1073741824, ffFixed, 10, 1) + ' Gb';
end;
function MemoryStatus( iInput : Integer ):string;
type
DWORDLONG = UInt64;
PMemoryStatusEx = ^TMemoryStatusEx;
TMemoryStatusEx = packed record
dwLength: DWORD;
dwMemoryLoad: DWORD;
ullTotalPhys: DWORDLONG;
ullAvailPhys: DWORDLONG;
ullTotalPageFile: DWORDLONG;
ullAvailPageFile: DWORDLONG;
ullTotalVirtual: DWORDLONG;
ullAvailVirtual: DWORDLONG;
ullAvailExtendedVirtual: DWORDLONG;
end;
var
MemStatus: TMemoryStatusEx;
hKernel32 : Cardinal;
GlobalMemoryStatusEx: function(var lpBuffer: TMemoryStatusEx): BOOL; stdcall;// external kernel32;
begin
hKernel32 := GetModuleHandle('Kernel32.dll');
@GlobalMemoryStatusEx := GetProcAddress( hKernel32, 'GlobalMemoryStatusEx');
FillChar(MemStatus, SizeOf(MemStatus), 0);
MemStatus.dwLength := SizeOf(MemStatus);
GlobalMemoryStatusEx(MemStatus);
Case iInput of
1: Result := 'Length: ' + BitToKB(MemStatus.dwLength);
2: Result := 'Memory Load: ' + BitToKB(MemStatus.dwMemoryLoad);
3: Result := 'Total: ' + BitToKB(MemStatus.ullTotalPhys);
4: Result := 'Available: ' + BitToKB(MemStatus.ullAvailPhys);
5: Result := 'Total Page File: ' + BitToKB(MemStatus.ullTotalPageFile);
6: Result := 'Avail Page File: ' + BitToKB(MemStatus.ullAvailPageFile);
7: Result := 'Total Virtual: ' + BitToKB(MemStatus.ullTotalVirtual);
8: Result := 'Avail Virtual: ' + BitToKB(MemStatus.ullAvailVirtual);
9: Result := 'Avail Extended Virtual: ' + BitToKB(MemStatus.ullAvailExtendedVirtual);
end;
end;
Использование:
Цитата
Label1.Caption := MemoryStatus(3); // Общее количество памяти