【问题标题】:Getting culture (locale) independent WMI property获取文化(区域设置)独立的 WMI 属性
【发布时间】:2016-03-16 00:07:42
【问题描述】:

我需要获取使用 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 属性独立于机器的语言环境?

【问题讨论】:

  • 发布完整代码。我可以猜到但不确定你在说什么。
  • 不要与硬编码字符串进行比较 - 而是在文化特定资源文件中使用“Hibernate after”,并与资源字符串进行比较。

标签: c# wmi locale cultureinfo


【解决方案1】:

您可能可以在Win32_PowerSetting 类的InstanceID 中使用GUID,而不是ElementName。在我的机器中,它是Microsoft:PowerSetting\{9d7815a6-7ee4-497e-8888-515a05f02364}。虽然我找不到官方文档,但这个 GUID,9d7815a6-7ee4-497e-8888-515a05f02364 似乎在某些 Windows 版本和语言环境中很常见,作为“休眠后”或“休眠空闲”的标识符。

【讨论】:

  • 在几台机器上验证过,而且似乎是一样的。将使用此 GUID 来查找设置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多