我可以找到很多关于如何在.Net中获取区域和文化设置的信息,但这些设置都没有获得当前的LOCATION设置。除了使用新的Location API之外,有没有人知道如何做到这一点(它需要在> = XP上工作)。
如果您不确定,该位置是在LOCATION标签的区域设置中设置的,而不是格式或语言标签。
由于
答案 0 :(得分:2)
啊哈!终于找到了它: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();
}
答案 1 :(得分:1)
GetUserGeoID
功能会告诉你。托管等效文件似乎为CurrentRegion.GeoId
。