Basic Univers

; Author : Flype
; Date : 10/03/2007

;-
;- Include:   memory.pbi
;- Descript.  Etat de la mémoire physique, paginée et virtuelle.
;- Compiler:  PureBasic 4.0 (Quad et Ascii/Unicode supporté).
;-
;- MSDN:
;- Syntax:    BOOL GlobalMemoryStatusEx(LPMEMORYSTATUSEX lpBuffer)
;- Client:    Included in Windows XP and Windows 2000 Professional.
;- Server:    Included in Windows Server 2003 and Windows 2000 Server.
;- Header:    Declared in Winbase.h; include Windows.h.
;- Library:   Use Kernel32.lib.
;-

EnableExplicit

;-
;- Private
;-

Import "shlwapi.lib"
  StrFormatKBSizeA(Size.q, *BufStr, BufSize.l)
  StrFormatByteSize64A(Size.q, *BufStr, BufSize.l)
EndImport

;-
;- Public
;-

ProcedureDLL.s FormatKB(Size.q)
  Protected BufStr.s{64}
  If StrFormatKBSizeA(Size, @BufStr, 64)
    ProcedureReturn PeekS(@BufStr, - 1, #PB_Ascii)
  EndIf
EndProcedure
ProcedureDLL.s FormatSize(Size.q)
  Protected BufStr.s{64}
  If StrFormatByteSize64A(Size, @BufStr, 64)
    ProcedureReturn PeekS(@BufStr, - 1, #PB_Ascii)
  EndIf
EndProcedure

ProcedureDLL.q TotalPhys()
  Protected mse.MEMORYSTATUSEX\dwLength = SizeOf(MEMORYSTATUSEX)
  If GlobalMemoryStatusEx_(mse)
    ProcedureReturn mse\ullTotalPhys
  EndIf
EndProcedure
ProcedureDLL.q AvailPhys()
  Protected mse.MEMORYSTATUSEX\dwLength = SizeOf(MEMORYSTATUSEX)
  If GlobalMemoryStatusEx_(mse)
    ProcedureReturn mse\ullAvailPhys
  EndIf
EndProcedure
ProcedureDLL.q UsedPhys()
  Protected mse.MEMORYSTATUSEX\dwLength = SizeOf(MEMORYSTATUSEX)
  If GlobalMemoryStatusEx_(mse)
    ProcedureReturn(mse\ullTotalPhys - mse\ullAvailPhys)
  EndIf
EndProcedure

ProcedureDLL.q TotalPageFile()
  Protected mse.MEMORYSTATUSEX\dwLength = SizeOf(MEMORYSTATUSEX)
  If GlobalMemoryStatusEx_(mse)
    ProcedureReturn mse\ullTotalPageFile
  EndIf
EndProcedure
ProcedureDLL.q AvailPageFile()
  Protected mse.MEMORYSTATUSEX\dwLength = SizeOf(MEMORYSTATUSEX)
  If GlobalMemoryStatusEx_(mse)
    ProcedureReturn mse\ullAvailPageFile
  EndIf
EndProcedure
ProcedureDLL.q UsedPageFile()
  Protected mse.MEMORYSTATUSEX\dwLength = SizeOf(MEMORYSTATUSEX)
  If GlobalMemoryStatusEx_(mse)
    ProcedureReturn(mse\ullTotalPageFile - mse\ullAvailPageFile)
  EndIf
EndProcedure

ProcedureDLL.q TotalVirtual()
  Protected mse.MEMORYSTATUSEX\dwLength = SizeOf(MEMORYSTATUSEX)
  If GlobalMemoryStatusEx_(mse)
    ProcedureReturn mse\ullTotalVirtual
  EndIf
EndProcedure
ProcedureDLL.q AvailVirtual()
  Protected mse.MEMORYSTATUSEX\dwLength = SizeOf(MEMORYSTATUSEX)
  If GlobalMemoryStatusEx_(mse)
    ProcedureReturn mse\ullAvailVirtual
  EndIf
EndProcedure
ProcedureDLL.q UsedVirtual()
  Protected mse.MEMORYSTATUSEX\dwLength = SizeOf(MEMORYSTATUSEX)
  If GlobalMemoryStatusEx_(mse)
    ProcedureReturn(mse\ullTotalVirtual - mse\ullAvailVirtual)
  EndIf
EndProcedure

ProcedureDLL.q AvailExtendedVirtual()
  Protected mse.MEMORYSTATUSEX\dwLength = SizeOf(MEMORYSTATUSEX)
  If GlobalMemoryStatusEx_(mse)
    ProcedureReturn mse\ullAvailExtendedVirtual
  EndIf
EndProcedure

;-
;- End
;-

DisableExplicit




; tests

Debug ""
Debug "Mémoire Physique"
Debug "Total: "      + FormatSize(TotalPhys())
Debug "Disponible: " + FormatSize(AvailPhys())
Debug "Utilisée: "   + FormatSize(UsedPhys())
Debug ""
Debug "Mémoire Paginée"
Debug "Total: "      + FormatSize(TotalPageFile())
Debug "Disponible: " + FormatSize(AvailPageFile())
Debug "Utilisée: "   + FormatSize(UsedPageFile())
Debug ""
Debug "Mémoire Virtuelle"
Debug "Total: "      + FormatSize(TotalVirtual())
Debug "Disponible: " + FormatSize(AvailVirtual())
Debug "Utilisée: "   + FormatSize(UsedVirtual())
Debug ""
Debug "Mémoire Etendue: "
Debug "Disponible: " + FormatSize(AvailExtendedVirtual())
Debug ""