//go:build windows // +build windows package staros import ( "syscall" "time" "unsafe" "b612.me/wincmd" "b612.me/win32api" ) // StartTime 开机时间 func StartTime() time.Time { data, _ := win32api.GetTickCount() date := float64(time.Now().Unix()) unix := date - float64(data)/1000 max := (unix - float64(int64(unix))) * 1000000000 return time.Unix(int64(unix), int64(max)) } // IsRoot 当前是否是管理员用户 func IsRoot() bool { return wincmd.Isas() } func DiskUsage(path string) (disk DiskStatus) { disk, _ = DiskUsageE(path) return } func DiskUsageE(path string) (disk DiskStatus, err error) { if path == "" { path = "." } lpFreeBytesAvailable := int64(0) lpTotalNumberOfBytes := int64(0) lpTotalNumberOfFreeBytes := int64(0) path16, err := syscall.UTF16PtrFromString(path) if err != nil { return } r1, _, callErr := syscall.NewLazyDLL("kernel32.dll").NewProc("GetDiskFreeSpaceExW").Call( uintptr(unsafe.Pointer(path16)), uintptr(unsafe.Pointer(&lpFreeBytesAvailable)), uintptr(unsafe.Pointer(&lpTotalNumberOfBytes)), uintptr(unsafe.Pointer(&lpTotalNumberOfFreeBytes)), ) if r1 == 0 { err = callErr return } disk.Free = uint64(lpTotalNumberOfFreeBytes) disk.Used = uint64(lpTotalNumberOfBytes - lpTotalNumberOfFreeBytes) disk.All = uint64(lpTotalNumberOfBytes) disk.Available = uint64(lpFreeBytesAvailable) return } func CpuUsage(sleep time.Duration) float64 { return 0 }