在没有 WMI 的情况下获取电池信息

Posted

技术标签:

【中文标题】在没有 WMI 的情况下获取电池信息【英文标题】:Get Battery Info without WMI 【发布时间】:2011-04-19 12:46:22 【问题描述】:

有没有办法在没有 WMI 的情况下获得电池 DesignCapacity 和 FullChargeCpacity ? WMI 不支持此值,因此我需要找到其他方法来获取它们。

或者也许有人有更好(更容易)的想法来获得 C# 中电池的磨损程度?

顺便说一句 我尝试以这种方式使用它,但只是返回 null

ManagementObjectSearcher query = 
        new ManagementObjectSearcher("SELECT DesignCapacity FROM Win32_Battery");

foreach (ManagementObject queryObj in query.Get())

    string dc = Convert.ToString(queryObj.GetPropertyValue("DesignCapacity"));
    label1.Text = dc + " mAh";

谢谢

【问题讨论】:

下载 WMI Explorer 以运行和测试 WMI 查询,以便您知道信息可用:ks-soft.net/hostmon.eng/wmi/index.htm WMI 的意义在于您不必自己与 Bios 对话。你做了不想想做的事情。具有未实现的 WMI 属性和方法并不少见,您必须从机器制造商处获取更新的 WMI 提供程序。如果可用,通常不可用。 那么没有其他方法可以获取这些数据吗?如果 WMI 不支持此属性并且机器制造商不提供任何 WMI 更新,那么获取此类数据的其他方法是什么? 我想知道 Windows 电池状态是如何工作的(状态托盘中的东西)。它不使用WMI吗?如果不是,它有什么用? (它也不“与 BIO 对话”。)如果它确实使用了 WMI,为什么它不能被复制? 我已经找到了可以解决我所有问题/疑问的东西cpuid-pro.com/index.php 但是价格说服我再次搜索:) 所以问题仍然存在如何从系统中获取这些值??跨度> 【参考方案1】:

要获得这些特定值,您需要针对不同的类而不是 win32_battery 进行单独的查询。

DesignCapacity可以从BatteryStaticData中查询

FullChargeCacity可以从BatteryFullChargedCapacity中查询

您还需要在代码中为查询使用不同的范围。这些类位于root/WMI 而不是root/cimv2

string scope = "root/WMI";
string query = "SELECT DesignedCapacity FROM BatteryStaticData";

ManagementObjectSearcher batteriesQuery = new ManagementObjectSearcher(scope, query);

ManagementObjectCollection batteries = batteriesQuery.Get();

foreach (ManagementObject battery in batteries)

    if (battery != null)
    
        foreach (var property in battery.Properties)
        
            Console.Log("Property name: " + property.Name + " Property value: " + property.Value);
        
    

【讨论】:

以上是关于在没有 WMI 的情况下获取电池信息的主要内容,如果未能解决你的问题,请参考以下文章

在没有远程 powershell 或 WMI 的情况下获取远程 SMB/CIFS 共享的权限

是否可以在不使用 WMI 的情况下获取网络适配器的 PnPDeviceId?

在不使用 WMI 的情况下访问主板信息

WMI 如何获取 ProcessorId?

Android:每个应用程序的电池使用情况

如何在 Python 中不使用 WMI 获取 PhysicalDisk?