Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inno setup 如何基于时区检测用户国家_Inno Setup - Fatal编程技术网

Inno setup 如何基于时区检测用户国家

Inno setup 如何基于时区检测用户国家,inno-setup,Inno Setup,如何使用inno脚本语言根据PC的时区设置检测用户所在的国家/地区 我只需要知道用户是来自美国还是美国以外。我不会依赖时区设置,而是依赖地理位置。有关函数返回的值列表,请参见: 忘记注意,此功能支持的最低客户端操作系统是Windows XP。对于那些不知道该设置来自何处的人,这里有一张来自Windows7的区域和语言控制面板小程序的图片。在上述功能中选中的地理位置,可以在那里配置: 您可以检查注册表中的时区设置:HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentContr

如何使用inno脚本语言根据PC的时区设置检测用户所在的国家/地区


我只需要知道用户是来自美国还是美国以外。

我不会依赖时区设置,而是依赖地理位置。有关函数返回的值列表,请参见:

忘记注意,此功能支持的最低客户端操作系统是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;