Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 如何将包含ascii码的字符串写入注册表?_Inno Setup - Fatal编程技术网

Inno setup 如何将包含ascii码的字符串写入注册表?

Inno setup 如何将包含ascii码的字符串写入注册表?,inno-setup,Inno Setup,在安装过程中,我需要将以下值写入注册表: [Registry] Root: HKCU; Subkey: "Software\Apt\TCM\Tables\Standard"; ValueType: string; ValueName: "Campaign planner"; ValueData: "Sent letter #1¦TOGGLE:TICK2¦1500\01Follow-up call¦TOGGLE:TICK2¦1500\01¦SPACE¦45\01Sent letter #2¦TOG

在安装过程中,我需要将以下值写入注册表:

[Registry]
Root: HKCU; Subkey: "Software\Apt\TCM\Tables\Standard"; ValueType: string; ValueName: "Campaign planner"; ValueData: "Sent letter #1¦TOGGLE:TICK2¦1500\01Follow-up call¦TOGGLE:TICK2¦1500\01¦SPACE¦45\01Sent letter #2¦TOGGLE:TICK2¦1500\01Follow-up call¦TOGGLE:TICK2¦1500\01¦SPACE¦45\01Notes¦¦4000"
但是如果它说“\01”,我需要写ASCII字符01,所以它会这样输入:


如何执行此操作?

一种方法可能是在编译时用函数替换所有出现的
\01
序列。虽然我找不到一种不关闭Pascal样式的字符串文字就转义SOH(ASCII字符1)的方法,但这将完成以下工作:

#pragma parseroption -p-

[Registry]
...; ValueData: "{#StringChange('Lorem ipsum\01dolor sit amet', '\01', '\x01')}"
然而,在我看来,上面的代码过于复杂了。如果您不介意所有反斜杠转义字符将计算为其相应的字符,则可以定义一个将转义它们的变量:

#pragma parseroption -p-
#define MyValue "Lorem ipsum\01dolor sit amet"

[Registry]
...; ValueData: "{#MyValue}"
但请注意,它适用于所有反斜杠转义字符,如
\02
\03
,以及它们各自的符号,它们可能并不总是适合您的常量值


不过,作为我发现的最可靠的方法,使用代码段及其函数。

从哪里获得值?它是在某处硬编码的吗?
StringChangeEx
您的
\01
带有
\1
。因此,如果我将“Hello\1World”写为值数据,我将在注册表中得到“Hello[]World”,其中[]是ascii字符1?不,这不起作用。如果您将这样的字符串传递到
[code]
中的
StringChangeEx
函数中,或者也可以使用预处理器的
StringChange
,这将是可行的。但要获得具体帮助,请回复@Ken的评论(或更新您的问题)。P.S.ASCII字符1是不可打印的。这非常有效。在编辑器中,这些行是否显示为红色并不重要?这是正确的。它是预处理器表达式的语法高亮显示。