如果您不希望这样做,则
win32api可以使用内置
ctypes模块。我通常在不使用CPython的情况下运行CPython
win32api,因此我很喜欢这些解决方案。
GetSystemPowerStatus()因为您必须定义
SYSTEM_POWER_STATUS结构,所以还需要做更多的工作,但还不错。
# Get power status of the system using ctypes to call GetSystemPowerStatusimport ctypesfrom ctypes import wintypesclass SYSTEM_POWER_STATUS(ctypes.Structure): _fields_ = [ ('ACLineStatus', wintypes.BYTE), ('BatteryFlag', wintypes.BYTE), ('BatteryLifePercent', wintypes.BYTE), ('Reserved1', wintypes.BYTE), ('BatteryLifeTime', wintypes.DWORD), ('BatteryFullLifeTime', wintypes.DWORD), ]SYSTEM_POWER_STATUS_P = ctypes.POINTER(SYSTEM_POWER_STATUS)GetSystemPowerStatus = ctypes.windll.kernel32.GetSystemPowerStatusGetSystemPowerStatus.argtypes = [SYSTEM_POWER_STATUS_P]GetSystemPowerStatus.restype = wintypes.BOOLstatus = SYSTEM_POWER_STATUS()if not GetSystemPowerStatus(ctypes.pointer(status)): raise ctypes.WinError()print 'ACLineStatus', status.ACLineStatusprint 'BatteryFlag', status.BatteryFlagprint 'BatteryLifePercent', status.BatteryLifePercentprint 'BatteryLifeTime', status.BatteryLifeTimeprint 'BatteryFullLifeTime', status.BatteryFullLifeTime在打印此内容的系统上(基本上是指“台式机,已插入”):
ACLineStatus 1BatteryFlag -128BatteryLifePercent -1BatteryLifeTime 4294967295BatteryFullLifeTime 4294967295



