2014-01-13 122 views
1

我知道如何使用wmi,我之前使用过它,但是,似乎我需要调用的wmi类是GetSystemPowerStatus。但我在查找和记录时遇到了问题。为了能够访问它,我需要知道名称空间以及类中数据的格式。有人可以帮助我吗?还有一些示例代码会很好。在python中使用wmi获取电池状态?

回答

5

使用ctypes,你可以调用Win32 API的:

from ctypes import * 

class PowerClass(Structure): 
    _fields_ = [('ACLineStatus', c_byte), 
      ('BatteryFlag', c_byte), 
      ('BatteryLifePercent', c_byte), 
      ('Reserved1',c_byte), 
      ('BatteryLifeTime',c_ulong), 
      ('BatteryFullLifeTime',c_ulong)]  

powerclass = PowerClass() 
result = windll.kernel32.GetSystemPowerStatus(byref(powerclass)) 
print(powerclass.BatteryLifePercent) 

上面的代码来自here


使用Win32_Battery class(你需要安装pywin32):使用wmi package

from win32com.client import GetObject 

WMI = GetObject('winmgmts:') 
for battery in WMI.InstancesOf('Win32_Battery'): 
    print(battery.EstimatedChargeRemaining) 

备选:

import wmi 

w = wmi.WMI() 
for battery in w.query('select * from Win32_Battery'): 
    print battery.EstimatedChargeRemaining 
+0

我不能使用WMI做到这一点?帽子会简单得多。这些代码中的一部分仅仅是我的头脑,我想了解我正在使用的代码,而不是在不知道它是什么的情况下使用它。 – user1803425

+0

@ user1803425,'GetSystemPowerStatus'是win32 api。你不能用WMI调用它。 – falsetru

+0

@ user1803425,我更新了答案以包含使用WMI的代码。你需要安装[pywin32](http://sourceforge.net/projects/pywin32/)。 – falsetru

0

```

import subprocess 

wmic = subprocess.getoutput("wmic path win32_battery get EstimatedChargeRemaining") 
print(wmic) 

```

输出:

EstimatedChargeRemaining 

96