在C#中获取当前位置(在区域和语言中指定)
如何获取操作系统的区域和语言中指定的机器当前位置? 我已经尝试从RegionInfo
类中获取它,但它返回了Region和Region的Format下拉列表中指定的Location。
只是为了澄清我的意思,如果您从机器的控制面板打开区域和语言,我想读取位置选项卡中指定的位置。 RegionInfo为我提供了格式下拉格式选项卡中指定的值。
经过大量的谷歌搜索,我终于得到了答案。 以下两个链接帮助我获得当前的机器位置 –
http://social.msdn.microsoft.com/Forums/eu/csharpgeneral/thread/6dfaa142-c588-4cb0-b044-fa1e8138b299
http://www.siao2.com/2007/02/21/1733999.aspx
如果有人对最终代码感兴趣,我做了以下实用程序类 –
public static class RegionAndLanguageHelper { #region Constants private const int GEO_FRIENDLYNAME = 8; #endregion #region Private Enums private enum GeoClass : int { Nation = 16, Region = 14, }; #endregion #region Win32 Declarations [DllImport("kernel32.dll", ExactSpelling = true, CallingConvention = CallingConvention.StdCall, SetLastError = true)] private static extern int GetUserGeoID(GeoClass geoClass); [DllImport("kernel32.dll")] private static extern int GetUserDefaultLCID(); [DllImport("kernel32.dll")] private static extern int GetGeoInfo(int geoid, int geoType, StringBuilder lpGeoData, int cchData, int langid); #endregion #region Public Methods /// /// Returns machine current location as specified in Region and Language settings. /// public static string GetMachineCurrentLocation() { int geoId = GetUserGeoID(GeoClass.Nation); ; int lcid = GetUserDefaultLCID(); StringBuilder locationBuffer = new StringBuilder(100); GetGeoInfo(geoId, GEO_FRIENDLYNAME, locationBuffer, locationBuffer.Capacity, lcid); return locationBuffer.ToString().Trim(); } #endregion }
是..但更容易:
CultureInfo info = CultureInfo.CurrentCulture;
你能试试吗?
RegionInfo.CurrentRegion.DisplayName;
这是否为您提供了所需的位置名称
基于“控制面板>区域>归属位置”,您可以获得RegionInfo。 试试这个 –
var regKeyGeoId = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Control Panel\International\Geo"); var geoID = (string)regKeyGeoId.GetValue("Nation"); var allRegions = CultureInfo.GetCultures(CultureTypes.SpecificCultures).Select(x => new RegionInfo(x.ToString())); var regionInfo = allRegions.FirstOrDefault(r => r.GeoId == Int32.Parse(geoID));