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是不可打印的。这非常有效。在编辑器中,这些行是否显示为红色并不重要?这是正确的。它是预处理器表达式的语法高亮显示。