メモ。ディスク容量とメモリ容量の取得。Delphi2009で動作確認。
いまさらですが。
SysStats.pas
unit SysStats; interface uses Windows, SysUtils; type TDiskSpace = record Directory: string; FreeAvailable: UInt64; TotalSpace: UInt64; TotalFree: UInt64; end; function GetMemoryStatus: TMemoryStatusEx; function GetAvailableMemory(Phy: Boolean = True): UInt64; function GetTotalMemory(Phy: Boolean = True): UInt64; function GetDiskSpace(Directory: string): TDiskSpace; function GetAvailableDiskSpace(Directory: string): UInt64; function GetTotalDiskSpace(Directory: string): UInt64; implementation function GetMemoryStatus: TMemoryStatusEx; begin Result.dwLength := SizeOf(TMemoryStatusEx); GlobalMemoryStatusEx(Result); end; function GetAvailableMemory(Phy: Boolean = True): UInt64; begin if Phy then Result := GetMemoryStatus.ullAvailPhys else Result := GetMemoryStatus.ullAvailVirtual; end; function GetTotalMemory(Phy: Boolean = True): UInt64; begin if Phy then Result := GetMemoryStatus.ullTotalPhys else Result := GetMemoryStatus.ullTotalVirtual; end; function GetDiskSpace(Directory: string): TDiskSpace; var FreeAvailable, TotalSpace, TotalFree: TLargeInteger; begin GetDiskFreeSpaceEx(PChar(Directory), FreeAvailable, TotalSpace, @TotalFree); Result.Directory := Directory; Result.FreeAvailable := FreeAvailable; Result.TotalSpace := TotalSpace; Result.TotalFree := TotalFree; end; function GetAvailableDiskSpace(Directory: string): UInt64; begin Result := GetDiskSpace(Directory).FreeAvailable; end; function GetTotalDiskSpace(Directory: string): UInt64; begin Result := GetDiskSpace(Directory).TotalSpace; end; end.
Project1.dpr
使用例
program Project1; {$APPTYPE CONSOLE} uses SysUtils, SysStats in '..\..\lib\SysStats.pas'; begin try Writeln('mem avail(Phy):', GetAvailableMemory); Writeln('mem avail(Virtual):', GetAvailableMemory(False)); Writeln('mem total(Phy):', GetTotalMemory); Writeln('mem total(Virtual):', GetTotalMemory(False)); Writeln('disk C:\ avail:', GetAvailableDiskSpace('C:\')); Writeln('disk C:\ total:', GetTotalDiskSpace('C:\')); except on E:Exception do Writeln(E.Classname, ': ', E.Message); end; end.
実行結果
>Project1.exe mem avail(Phy):2388979712 mem avail(Virtual):2129387520 mem total(Phy):3489107968 mem total(Virtual):2147352576 disk C:\ avail:148713963520 disk C:\ total:209966686208