Inno setup 如何基于时区检测用户国家
如何使用inno脚本语言根据PC的时区设置检测用户所在的国家/地区Inno setup 如何基于时区检测用户国家,inno-setup,Inno Setup,如何使用inno脚本语言根据PC的时区设置检测用户所在的国家/地区 我只需要知道用户是来自美国还是美国以外。我不会依赖时区设置,而是依赖地理位置。有关函数返回的值列表,请参见: 忘记注意,此功能支持的最低客户端操作系统是Windows XP。对于那些不知道该设置来自何处的人,这里有一张来自Windows7的区域和语言控制面板小程序的图片。在上述功能中选中的地理位置,可以在那里配置: 您可以检查注册表中的时区设置:HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentContr
我只需要知道用户是来自美国还是美国以外。我不会依赖时区设置,而是依赖地理位置。有关函数返回的值列表,请参见: 忘记注意,此功能支持的最低客户端操作系统是Windows XP。对于那些不知道该设置来自何处的人,这里有一张来自Windows7的区域和语言控制面板小程序的图片。在上述功能中选中的地理位置,可以在那里配置:
您可以检查注册表中的时区设置:
HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
。您还可以使用参数/g
调用TZUTIL.exe
,并将结果
复制为变量
。时区与国家之间没有一对一映射。您可以检查-5到-8以获得大致的概念,但这并不准确。@RobeN,您应该尽可能多地使用本机API函数,因为只有这些函数可以确保,即使在下一个操作系统版本中将此注册表项移动到某个位置,该API函数仍将仅从新位置获得正确的信息。对于这种情况,它是函数。但要确定,如果用户来自美国,我不会依赖时区(例如,用户可以在度假时离开其内陆时区,因此他也可以临时更改时区)。可以使用该选项,该选项在启动时禁用自动功能导入检查。然后,您可以将函数调用包装为一个try..except
块,一旦您调用该函数且该函数不可用或导入错误,它将落入异常块。是的,在Windows 2k上该函数将失败。我不希望你会支持Windows2K,所以我没有注意到WindowsXP的最低要求。我甚至不知道,Windows 2k.+1中是否有重新设置API的设置。我知道它存在,但懒得去查:)
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=userdocs:Inno Setup Examples Output
[Code]
const
GEOCLASS_NATION = 16;
GEOID_UNITED_STATES = $F4;
type
GEOID = Longint;
GEOCLASS = DWORD;
function GetUserGeoID(GeoClass: GEOCLASS): GEOID;
external 'GetUserGeoID@kernel32.dll stdcall';
function IsGeoLocationUSA: Boolean;
begin
Result := GetUserGeoID(GEOCLASS_NATION) = GEOID_UNITED_STATES;
end;
function InitializeSetup: Boolean;
begin
if IsGeoLocationUSA then
MsgBox('Geographical location U.S.A.', mbInformation, MB_OK)
else
MsgBox('Geographical location other than U.S.A.', mbInformation, MB_OK);
end;