当前位置: 首页 > 知识库问答 >
问题:

Inno 设置 [代码] 部分变量为 [注册表]

湛嘉歆
2023-03-14

我在进行 Inno 设置时遇到问题。

我在这里的[code]部分使用分辨率检测脚本:
INNO设置:如何获取主监视器的分辨率?

现在,我想将< code>xres和< code>yres值放入安装程序的< code>[Registry]部分,如下所示。

Root: HKCU; Subkey: "Software\MyApp\Settings"; Flags: uninsdeletekey; ValueType: dword; \
    ValueName: "ScreenWidth"; ValueData: "XRES"
Root: HKCU; Subkey: "Software\MyApp\Settings"; Flags: uninsdeletekey; ValueType: dword; \
    ValueName: "ScreenHeight"; ValueData: "YRES"

我尝试了这种方法如何在 Inno Setup 中使用 Pascal 变量?,但我无法让它工作。我多次尝试自己解决问题,但我放弃了......

有人能帮我解释一下怎么做吗?< br >我是Inno设置的新手,尤其是Pascal。

共有1个答案

越星晖
2023-03-14

一种方法是为两个维度编写一个脚本常量函数,并通过传递的参数返回水平或垂直解析度。其余的在Inno安装引擎上:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

[Registry]
; the GetResolution function used in the following {code:...} scripted constants
; takes as parameter X to retrieve horizontal resolution, Y to retrieve vertical
Root: HKCU; Subkey: "Software\MyApp\Settings"; Flags: uninsdeletekey; ValueType: dword; \
   ValueName: "ScreenWidth"; ValueData: "{code:GetResolution|X}"
Root: HKCU; Subkey: "Software\MyApp\Settings"; Flags: uninsdeletekey; ValueType: dword; \
    ValueName: "ScreenHeight"; ValueData: "{code:GetResolution|Y}"
[Code]
function GetSystemMetrics(nIndex: Integer): Integer;
  external 'GetSystemMetrics@user32.dll stdcall';

const
  SM_CXSCREEN = 0;
  SM_CYSCREEN = 1;

function GetResolution(Param: string): string;
begin
  // in the {code:...} constant function call we are passing either
  // X or Y char to its parameter (here it is the Param parameter),
  // so let's decide which dimension we return by the Param's first
  // char (uppercased to allow passing even small x and y)
  case UpperCase(Param[1]) of
    'X': Result := IntToStr(GetSystemMetrics(SM_CXSCREEN));
    'Y': Result := IntToStr(GetSystemMetrics(SM_CYSCREEN));
  end;
end;
 类似资料:
  • 在安装过程中,我想写一个长的多行/多段文本到注册表值 写入注册表值很容易 [注册表]根:香港大学;子项:“软件\我的公司\我的软件”;值类型:字符串;值名称:“消息”;ValueData:“一些文本” 但是我宁愿定义一个多行文本常量来代替“一些文本” 即类似 根:香港大学;子项:“软件\我的公司\我的软件”;值类型:字符串;值名称:“消息”;价值数据:#mytext 我可能很迟钝,但我不知道如何做

  • 我尝试使用inno设置在注册表中设置一个键。但它总是在新的子项部分中设置条目。 我想将数据添加到…\Wow6432Node\中,这意味着它应该是该文件夹中的一个新子文件夹,但我总是在…\Wow 6432Node…中添加一个新的\Wow6452Node\sub,并且daa将写在那里:(我如何才能正确。这是我的代码: 安装后,我在我的注册表HKLM \子项:软件* * * * wow 6432 nod

  • 这是我在INNO设置中的三个示例部分。我想在INI部分使用。我该怎么做?

  • 问题内容: 我需要将datetime变量从现在开始设置为两天,但时间部分必须为18:00。 例如,如果我现在打电话,我会得到。我需要将其设置为。 是否有人对此有很好的摘录,或者有任何想法正确地做到这一点? 问题答案: 这会截断当前日期,并增加2天18小时。 可能的变化:

  • 注意: 自 PHP 5.4.0 开始,register_globals 选项已经被移除并不再使用。这是在提醒你如果你正在升级旧的应用程序的话,你需要注意这一点。 当 register_globals 选项被开启时,它会使许多类型的变量(包括 $_POST, $_GET 和 $_REQUEST)被注册为全局变量。这将很容易使你的程序无法有效地判断数据的来源并导致安全问题。 例如:$_GET['foo

  • 1.1.1. 全局变量注册 如果您还能记起早期WEB应用开发中使用C开发CGI程序的话,一定会对繁琐的表单处理深有体会。当PHP的register_globals配置选项打开时,复杂的原始表单处理不复存在,公用变量会自动建立。它让PHP编程变得容易和方便,但同时也带来了安全隐患。 事实上,register_globals是无辜的,它并不会产生漏洞,同时还要开发者犯错才行。可是,有两个主要原因导致了