Inno setup Inno设置[Code]节变量到[Registry]

Inno setup Inno设置[Code]节变量到[Registry],inno-setup,Inno Setup,我的Inno设置有问题 我在这里的[code]部分使用分辨率检测脚本: 现在我想把xres和yres值放到我的安装程序的[Registry]部分,如下所示 Root: HKCU; Subkey: "Software\MyApp\Settings"; Flags: uninsdeletekey; ValueType: dword; \ ValueName: "ScreenWidth"; ValueData: "XRES" Root: HKCU; Subkey: "Software\MyA

我的Inno设置有问题

我在这里的
[code]
部分使用分辨率检测脚本:

现在我想把
xres
yres
值放到我的安装程序的
[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设置的新手,尤其是Pascal。

一种方法是为两个维度编写一个函数,并通过传递的参数返回水平或垂直分辨率。其余部分基于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}"
[代码]
函数GetSystemMetrics(nIndex:Integer):整数;
外部的GetSystemMetrics@user32.dllstdcall';
常数
SM_CXSCREEN=0;
SM_CYSCREEN=1;
函数GetResolution(Param:string):string;
开始
//在{code:…}常量函数调用中,我们传递
//将X或Y字符添加到其参数(此处为Param参数),
//那么让我们决定首先通过参数返回哪个维度
//char(大写,即使是很小的x和y也可以通过)
的大写字母(参数[1])
“X”:结果:=IntToStr(GetSystemMetrics(SM_CXSCREEN));
“Y”:结果:=IntToStr(GetSystemMetrics(SM_CYSCREEN));
结束;
结束;

P.S.别忘了卸载安装程序的上一个实例,因为在您安装另一个实例时,条目中使用的设置不会覆盖注册表中的现有值。出于兴趣,为什么应用程序本身无法获取此信息?毕竟,它可能会在应用程序运行时更改,或者在运行后的任何时间更改。