// +build windows package staros import ( "log" "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) { kernel32, err := syscall.LoadLibrary("Kernel32.dll") if err != nil { log.Panic(err) } defer syscall.FreeLibrary(kernel32) GetDiskFreeSpaceEx, err := syscall.GetProcAddress(syscall.Handle(kernel32), "GetDiskFreeSpaceExW") if err != nil { log.Panic(err) } lpFreeBytesAvailable := int64(0) lpTotalNumberOfBytes := int64(0) lpTotalNumberOfFreeBytes := int64(0) syscall.Syscall6(uintptr(GetDiskFreeSpaceEx), 4, uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("C:"))), uintptr(unsafe.Pointer(&lpFreeBytesAvailable)), uintptr(unsafe.Pointer(&lpTotalNumberOfBytes)), uintptr(unsafe.Pointer(&lpTotalNumberOfFreeBytes)), 0, 0) 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 }