我可以找到很多有關如何獲得.Net中的區域和文化設置的信息,但這些信息都不能獲得當前的LOCATION設置。有誰知道如何做到這一點,而不是使用新的Location API(它需要在> = XP上工作)。如何獲取Windows區域位置設置?
如果您不確定,位置在LOCATION選項卡的區域設置中設置,而不是在Formats或Languages選項卡中設置。
謝謝
我可以找到很多有關如何獲得.Net中的區域和文化設置的信息,但這些信息都不能獲得當前的LOCATION設置。有誰知道如何做到這一點,而不是使用新的Location API(它需要在> = XP上工作)。如何獲取Windows區域位置設置?
如果您不確定,位置在LOCATION選項卡的區域設置中設置,而不是在Formats或Languages選項卡中設置。
謝謝
GetUserGeoID
函數會告訴你。受管理的等效物似乎是CurrentRegion.GeoId
。
是的,那也是我的想法,但這也是基於選定的格式,而不是位置。 – Jonesie
我被愚弄了,因爲XP會將位置設置放在語言選項卡上。 (XP沒有「位置」選項卡)'GetUserGeoID'似乎是正確的功能,它只是C#中的曲面,不可用。 –
啊哈!終於找到了: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();
}
相關:在Windows如何獲取/設置當前位置(http://stackoverflow.com/questions/10085115/how-to- get-set-current-location-in-windows) – AndyT