【问题标题】:How do I get the windows regional location setting?如何获取 Windows 区域位置设置?
【发布时间】:2011-10-05 23:07:39
【问题描述】:

我可以找到很多关于如何在 .Net 中获取区域和文化设置的信息,但这些都没有获取当前的 LOCATION 设置。除了使用新的 Location API(它需要在 >= XP 上工作)之外,有谁知道如何做到这一点。

如果您不确定,该位置是在“位置”选项卡的区域设置中设置的,而不是“格式”或“语言”选项卡。

谢谢

【问题讨论】:

标签: .net windows


【解决方案1】:

啊哈!终于找到了:http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/a4bb7327-f9d3-4115-a455-f664a0818120

链接中的必需代码:

using System.Runtime.InteropServices;
using System.Text;

private const int GEOCLASS_NATION = 16;

//SYSGEOTYPE
private const int GEO_NATION = 1;
private const int GEO_LATITUDE = 2;
private const int GEO_LONGITUDE = 3;
private const int GEO_ISO2 = 4;
private const int GEO_ISO3 = 5;
private const int GEO_RFC1766 = 6;
private const int GEO_LCID = 7;
private const int GEO_FRIENDLYNAME = 8;
private const int GEO_OFFICIALNAME = 9;
private const int GEO_TIMEZONES = 10;
private const int GEO_OFFICIALLANGUAGES = 11;


[DllImport("kernel32.dll")]
static extern int GetUserGeoID(int geoId);
[DllImport("kernel32.dll")]
static extern int GetGeoInfo(int geoid, int GeoType, StringBuilder lpGeoData, int cchData, int langid);
[DllImport("kernel32.dll")]
static extern int GetUserDefaultLCID();

static void Main(string[] args)
{
  int geoId = GetUserGeoID(GEOCLASS_NATION);
  string friendlyName = GetGeoFriendlyName(geoId);
}


private string GetGeoFriendlyName(int geoId)
{
  int lcid = GetUserDefaultLCID();
  StringBuilder bldr = new StringBuilder(50);
  GetGeoInfo(geoId, GEO_FRIENDLYNAME, bldr, bldr.Capacity, lcid);

  return bldr.ToString();
}

【讨论】:

    【解决方案2】:

    GetUserGeoID 函数会告诉你。托管等效项似乎是 CurrentRegion.GeoId

    【讨论】:

    • 是的,我也是这么想的,但这也只是基于选择的格式,而不是位置。
    • 我被愚弄了,因为 XP 将位置设置放在了语言选项卡上。 (XP 没有 Locations 选项卡。)GetUserGeoID 似乎是正确的功能,它只是 C# 中的表面处理不可用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多