如何检测正在运行的国家/地区安装程序

时间:2010-09-08 11:09:33

标签: inno-setup

如何检测哪个国家/地区的安装程序正在运行(离线)

3 个答案:

答案 0 :(得分:1)

GetUserDefaultGeoName function

[Code]

function GetUserDefaultGeoName(GeoName: string; GeoNameCount: Integer): Integer; 
  external 'GetUserDefaultGeoName@Kernel32.dll stdcall';

function GetGeoName: string;
begin
  SetLength(Result, 100);
  SetLength(Result, GetUserDefaultGeoName(Result, Length(Result)));
end;

答案 1 :(得分:0)

您应该访问注册表项'H_KEY_CURRENT_USER / Control Panel / International / sCountry'或者可能是'sLanguage'。

请注意,这将为您提供用户想要的文化习俗和语言,而不是实际的地理位置。

可能的替代方案是'H_KEY_CURRENT_USER / Software / Microsoft / Windows NT / TimeZones / TimeZoneKeyName',它可能会为您提供真实位置的线索。

否则,您可以使用像“http://www.ip-adress.com/”这样的网络服务,它会告诉您机器ISP的位置,鉴于某些公司网络遭受了严重破坏,这可能与机器本身位于不同的国家/地区。

通常最有效的方法是让用户从下拉菜单中选择“选择国家/地区”。

答案 2 :(得分:0)

您不应该依赖注册表值,它们可能会在更高版本的Windows中更改或删除,恕不另行通知。我建议直接使用Windows API GetLocaleInfo()

顺便说一句,你为什么要那样做?如果您只想让安装程序自动使用与用户控制面板中的语言设置相对应的语言,请在LanguageDetectionMethod=locale部分设置[Setup]