Unit MemInfo; Interface Procedure FreeMemory(Var lTotalMemory: LongInt; Var lFreeMemory: LongInt); Implementation Uses WinTypes, WinProcs, ToolHelp; Function Min(Number1, Number2 : LongInt) : LongInt; {Возвращаем минимум из Number1 & Number2} Begin If (Number1 <= Number2) Then Min := Number1 Else Min := Number2; End; {end Function, Min()} Procedure FreeMemory(Var lTotalMemory: LongInt; Var lFreeMemory: LongInt); {Вычисляем и возвращаем сумму полной и свободной памяти (Total & Free Memory) в байтах (ie. divide each by 1024 of Kilobytes) NB: Total Memory будет равна 0, если windows запущена в стандартном режиме (Standard Mode), поскольку в этом случае Total Memory не может быть определена.} Var lWinFlags : LongInt; mmiMemManInfo : TMemManInfo; Begin {Инициализируем переменные} lTotalMemory := 0; lFreeMemory := 0; lWinFlags := GetWinFlags; If (0 <> (lWinFlags And WF_ENHANCED)) Then Begin {Инициализируем структуру MemManInfo} mmiMemManInfo.dwSize := SizeOf(TMemManInfo); mmiMemManInfo.dwLargestFreeBlock := 0; mmiMemManInfo.dwMaxPagesAvailable := 0; mmiMemManInfo.dwMaxPagesLockable := 0; mmiMemManInfo.dwTotalLinearSpace := 0; mmiMemManInfo.dwTotalUnlockedPages := 0; mmiMemManInfo.dwFreePages := 0; mmiMemManInfo.dwTotalPages := 0; mmiMemManInfo.dwFreeLinearSpace := 0; mmiMemManInfo.dwSwapFilePages := 0; mmiMemManInfo.wPageSize := 0; MemManInfo(@mmiMemManInfo); {Получение информации менеджера памяти} {Вычисление Total Memory} lTotalMemory := (Min(mmiMemManInfo.dwTotalLinearSpace, mmiMemManInfo.dwTotalPages + mmiMemManInfo.dwSwapFilePages) * mmiMemManInfo.wPageSize); {Вычисляем Free Memory} lFreeMemory := GetFreeSpace(0); End Else Begin {Полная память = 0} lTotalMemory := 0; {Вычисляем Free Memory} lFreeMemory := GetFreeSpace(0); End; {end If-Then-Else} End; {End Procedure, TotalMemory()} End. {Конец модуля, MemInfo} |
[001983]