Descripción
Esta receta es un ejemplo de cómo utilizar funciones nativas de las bibliotecas de Windows desde Python (usando ctypes).
Por ejemplo, en este caso se usa para consultar el estado de la batería (carga en Wh y tiempos estimados, consumo de energía en Watts, etc.) usando la función CallNtPowerInformation de la biblioteca de windows PowrProf.lib (PowrProf.dll). También se ilustra cómo usar estructuras de C en python para llamar a funciones externas.
Es necesario tener una versión de Python con ctypes y estar sobre windows.
Ejemplo:
El ejemplo en Python (winbatt.py) registra un objeto python MiMiniInterpretePython, exponiendo:
carga la biblioteca ´powrprof.dll´
define la constante SystemBatteryState (InformationLevel) de POWER_INFORMATION_LEVEL
define la estructura SYSTEM_BATTERY_STATE
inicializa la estructura en blanco
llama a la función CallNtPowerInformation
imprime los resultados
Archivo winbatt.py
# -*- coding: iso-8859-1 -*- import ctypes l = ctypes.cdll.LoadLibrary("powrprof") SystemBatteryState = 5 # POWER_INFORMATION_LEVEL enum class SYSTEM_BATTERY_STATE(ctypes.Structure): _fields_ = [ ("AcOnLine", ctypes.c_bool), ("BatteryPresent", ctypes.c_bool), ("Charging", ctypes.c_bool), ("Discharging", ctypes.c_bool), ("Spare1", ctypes.c_bool * 4), ("MaxCapacity", ctypes.c_long), ("RemainingCapacity", ctypes.c_long), ("Rate", ctypes.c_long), ("EstimatedTime", ctypes.c_long), ("DefaultAlert1", ctypes.c_long), ("DefaultAlert2", ctypes.c_long), ] sb = SYSTEM_BATTERY_STATE(0) retval = l.CallNtPowerInformation(SystemBatteryState, None, 0, ctypes.addressof(sb), ctypes.sizeof(sb)) assert retval == 0 # debe devolver 0 si no hay error print "AcOnLine:", sb.AcOnLine print "Charging:", sb.Charging print "Discharging:", sb.Discharging print "Capacity:", sb.MaxCapacity, "mWh max", sb.RemainingCapacity, "mWh remaining", print sb.RemainingCapacity*100/sb.MaxCapacity, "%" print "Rate:", sb.Rate / 1000.0, "W" print "Estimated Time:", sb.EstimatedTime / 3600, "h", sb.EstimatedTime / 60 % 60, "min"
Para usarlo se puede ejecutar desde línea de comando:
C:\src>python winbatt.py AcOnLine: False Charging: False Discharging: True Capacity: 45140 mWh max 5417 mWh remaining 12 % Rate: -9.435 W Estimated Time: 0 h 34 min
Para Descargar Fuentes: