//go:build windows package main import ( "syscall" "unsafe" ) type systemPowerStatus struct { ACLineStatus byte BatteryFlag byte BatteryLifePercent byte SystemStatusFlag byte BatteryLifeTime uint32 BatteryFullLifeTime uint32 } var getSystemPowerStatus = syscall.NewLazyDLL("kernel32.dll").NewProc("GetSystemPowerStatus") func systemBattery() (bool, error) { var status systemPowerStatus result, _, err := getSystemPowerStatus.Call(uintptr(unsafe.Pointer(&status))) if result == 0 { return false, err } return windowsOnBattery(status.ACLineStatus, status.BatteryFlag), nil }