在Windows 10上访问区域的其他设置的数据

时间:2019-02-07 14:46:07

标签: c# windows region

您可以在以下位置更改测量系统:

  

Windows设置=>时间和语言=>其他日期,时间和   区域设置=>更改日期,时间或数字格式=>   其他设置=>测量系统

在C#中使用RegionInfo.CurrentRegion.IsMetric时,此数据与您在设置中选择的内容无关。

如何从当前选择的测量系统的C#代码中访问?

2 个答案:

答案 0 :(得分:0)

好的,我找到了解决方法(c#):    Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Control Panel\International", "iMeasure", 0)

这是Windows注册表,用于存储有关所选测量系统的信息(而不是绑定到区域的信息)。

答案 1 :(得分:0)

请记住,以下这种单行代码在大多数情况下在手动更改公制/美国制单位时不起作用,因此请勿使用此下一行

System.Globalization.RegionInfo.CurrentRegion.IsMetric;

@salverio写的东西很完美。

using System;
using Microsoft.Win32;

public static bool IsMetric(string KeyPath,
                            string KeyName)
{
    try
    {
        string input;
        input = ReadRegistry(KeyPath, KeyName);

        if (input == "0")
        {
            return true;
        }
        else if (input == "1")
        {
            return false;
        }

        return System.Globalization.RegionInfo.CurrentRegion.IsMetric;
    }
    catch (Exception ex)
    {
        return System.Globalization.RegionInfo.CurrentRegion.IsMetric;
    }
}


public static string ReadRegistry(string path,
                                    string name)
{
    try
    {
        string output = "";

        using (RegistryKey key = Registry.CurrentUser.OpenSubKey(path))
        {
            if (key != null)
            {
                object o = key.GetValue(name);
                if (o != null)
                {
                    output = o as string;
                }
            }
        }

        return output;
    }
    catch (Exception ex)
    {
        return "";
    }
}

只需调用函数IsMetric(注册表项路径,注册表项名称)

在哪里

KeyPath = @"Control Panel\International";
KeyName = "iMeasure";