c# - 获取独立于文化(区域设置)的 WMI 属性

标签 c# wmi locale cultureinfo

我需要使用 WMI 获取计算机的电源设置。我正在使用MSDN Link以获得所需的值。我需要返回列表中的特定值。以下 C# 代码执行此操作:

string NamespacePath = @"root\cimv2\power";
string powerPlanClass = "Win32_powerplan";
string powerSettingClass = "Win32_PowerSettingDataIndex";

ManagementClass powerPlanManagementClass = new ManagementClass(NamespacePath + ":" + powerPlanClass);
ManagementObject powerPlanManagementObject = null;
foreach (ManagementObject managementObject in powerPlanManagementClass.GetInstances())
{
    if (managementObject["IsActive"] != null && Boolean.Parse(managementObject["IsActive"].ToString()))
    {
        powerPlanManagementObject = managementObject;
    }
}

Dictionary<string, PowerSetting> powerItems = new Dictionary<string, PowerSetting>()
    {
       {"AC", new PowerSetting() },
       {"DC", new PowerSetting() }
    };


foreach (ManagementObject oObject in powerPlanManagementObject.GetRelated(powerSettingClass))
        {
            var instanceId = oObject["instanceId"];
            string[] powerSourceSettings = instanceId.ToString().Split(new string[] { @"\" }, StringSplitOptions.RemoveEmptyEntries);
            var powerSourceType = powerSourceSettings[2];
            ManagementObjectCollection managementObjects = oObject.GetRelated("Win32_PowerSetting");
            var elementName = string.Empty;
            foreach (var managementObject in managementObjects)
            {
                elementName = managementObject["ElementName"].ToString();
            }
            var indexValue = uint.Parse(oObject["settingindexvalue"].ToString());

            if (elementName.Equals("Hibernate after",StringComparison.OrdinalIgnoreCase))
            {                    
                if (powerSourceType.Equals("AC", StringComparison.Ordinal))
                {
                    powerItems["AC"].HibernateAfter = indexValue;
                }                    
            }
        }

注意与字符串“Hibernate after”的匹配。这适用于区域设置为 en-us 的计算机,但不适用于其他区域设置。有没有其他方法可以获取独立于计算机区域设置的 WMI 属性?

最佳答案

也许您可以在 Win32_PowerSettingInstanceID 中使用 GUID类而不是 ElementName。在我的机器中,它是 Microsoft:PowerSetting\{9d7815a6-7ee4-497e-8888-515a05f02364}。虽然我找不到官方文档,但这个 GUID,9d7815a6-7ee4-497e-8888-515a05f02364 似乎对于某些 Windows 版本和区域设置来说很常见,作为“休眠后”或“休眠空闲”的标识符”。

关于c# - 获取独立于文化(区域设置)的 WMI 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36024566/

相关文章:

python - 在 python 中使用 wmi 获取电池状态?

javascript - Jquery datepicker 和 Spring MVC 国际化

c# - 如何使用 linq 将 IEnumerable 转换为 Collection

c# - 动态设置类型或调用泛型方法的结果?

powershell - 使用Powershell获取HDD序列号

java - 如何使 Date 语言环境独立?

java - 在 java 中将输入对话框区域设置更改为希伯来语

c# - 具有 varbinary(max) OUTPUT 的 CLR 存储过程失败,但与 T-SQL 相同的过程

c# - 安装COM Add In后,在Excel中测试连接,出现蓝屏

c# - ManagementObjectSearcher Get() 方法抛出异常