O máximo que eu tenho é essa função aqui:
function InfoSys: String;
var SysInfo: TSystemInfo;
xMemTot, xMemLiv: Extended;
MemoryStatus: TMemoryStatus;
(*{typedef struct _MEMORYSTATUS}
DWORD dwLength; // sizeof(MEMORYSTATUS)
DWORD dwMemoryLoad; // percentual de memória em uso
DWORD dwTotalPhys; // bytes de memória física
DWORD dwAvailPhys; // bytes livres de memória física
DWORD dwTotalPageFile; // bytes de paginação de arquivo
DWORD dwAvailPageFile; // bytes livres de paginação de arquivo
DWORD dwTotalVirtual; // bytes em uso de espaço de endereço
DWORD dwAvailVirtual; // bytes livres}*)
begin
GetSystemInfo(SysInfo);
case SysInfo.dwProcessorType of
386 : result := ´Processador 80386´;
486 : result := ´Processador 80486´;
586 : result := ´Processador Pentium´; else
result := Format(´Processador desconhecido (¬d)´, [SysInfo.dwProcessorType]);
end;
Result := Result + ´ de ´+FormatFloat(´#,´,GetCpuSpeed)+´ Mhz´+chr(10)+chr(13)+chr(10)+chr(13);
MemoryStatus.dwLength:= sizeof(MemoryStatus);
GlobalMemoryStatus(MemoryStatus);
xMemTot := MemoryStatus.dwTotalPhys/1048576;
xMemLiv := xMemTot * ((100 - MemoryStatus.dwMemoryLoad) / 100);
Result := Result + ´Memória RAM: ´ + FormatFloat(´000.00´,xMemTot)+´ Mb´+chr(10)+chr(13);
Result := Result + ´Memória Livre: ´ + FormatFloat(´000.00´,xMemLiv)+ ´ Mb´;
end;