如何獲取機器的當前位置,如在OS的區域和語言中指定的?我已經嘗試從RegionInfo
類中得到這個,但它返回Location(區域和語言)格式下拉菜單中指定的位置。在C#中獲取當前位置(在區域和語言中指定)
只是爲了闡明我的意思,如果您從機器的控制面板打開區域和語言,我想按位置選項卡中指定的方式讀取位置。 RegionInfo給出了「格式」選項卡的「格式」下拉列表中指定的值。
如何獲取機器的當前位置,如在OS的區域和語言中指定的?我已經嘗試從RegionInfo
類中得到這個,但它返回Location(區域和語言)格式下拉菜單中指定的位置。在C#中獲取當前位置(在區域和語言中指定)
只是爲了闡明我的意思,如果您從機器的控制面板打開區域和語言,我想按位置選項卡中指定的方式讀取位置。 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
/// <summary>
/// Returns machine current location as specified in Region and Language settings.
/// </summary>
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
}
這是多種操作系統上的唯一工作解決方案,如Win7 + Win8的。我不明白爲什麼沒有評分... – Raffaeu 2013-02-07 15:40:32
'使用(var regKeyGeo = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@「Control Panel \ International \ Geo」)) { Response.Write(「
Geo Nation「+ regKeyGeo.GetValue(」Nation「)。ToString()); }' –
Kiquenet
2015-12-21 14:58:34
@Kiquenet使用註冊表是我絕對避免的。這通常是沒有文檔和不受支持的,你可以確信它會在某個時候破裂。 – Poorkenny 2016-06-08 10:21:18
基地面板>地區>家庭地點「,你可以得到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));
@Sai我認爲OP是指地理位置。 – Glenn 2012-01-16 11:30:53
我認爲他希望位置在*烏克蘭,美國,英國*像智慧和文化無關 – V4Vendetta 2012-01-16 11:58:46
這是正確的。例如,我的文化可以是英語(美國),我的位置可以是印度。您可以在區域和語言控制面板中單獨更改這兩個選項。 – 2012-01-16 13:15:33