implements memory information on windows.
This commit is contained in:
parent
8c60a8f8c5
commit
ab22e78f2d
|
@ -2,9 +2,42 @@
|
|||
|
||||
package main
|
||||
|
||||
import (
|
||||
"syscall"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
var (
|
||||
modKernel32 = syscall.NewLazyDLL("kernel32.dll")
|
||||
globalMemoryStatusEx = modKernel32.NewProc("GlobalMemoryStatusEx")
|
||||
)
|
||||
|
||||
type MEMORYSTATUSEX struct {
|
||||
cbSize uint32
|
||||
dwMemoryLoad uint32
|
||||
ullTotalPhys uint64 // in bytes
|
||||
ullAvailPhys uint64
|
||||
ullTotalPageFile uint64
|
||||
ullAvailPageFile uint64
|
||||
ullTotalVirtual uint64
|
||||
ullAvailVirtual uint64
|
||||
ullAvailExtendedVirtual uint64
|
||||
}
|
||||
|
||||
func (m Mem) Virtual_memory() (Virtual_memory, error) {
|
||||
ret := Virtual_memory{}
|
||||
|
||||
var memInfo MEMORYSTATUSEX
|
||||
memInfo.cbSize = uint32(unsafe.Sizeof(memInfo))
|
||||
mem, _, _ := globalMemoryStatusEx.Call(uintptr(unsafe.Pointer(&memInfo)))
|
||||
if mem == 0 {
|
||||
return ret, syscall.GetLastError()
|
||||
}
|
||||
|
||||
ret.Total = memInfo.ullTotalPhys
|
||||
ret.Available = memInfo.ullAvailPhys
|
||||
ret.UsedPercent = float64(memInfo.dwMemoryLoad)
|
||||
ret.Used = ret.Total - ret.Available
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue