最近搞某个网络监控软件,要批量导入数据参数,无奈软件开发的设定全部被存在注册表中。
这里先说一下注册表中的REG_SZ
,REG_EXPAND_SZ
,REG_MULTI_SZ
的区别。官方大致表述为:
REG_SZ
:简单字符串,单行。
REG_EXPAND
:扩展类型字符串。
REG_MULTI_SZ
:换行字符串。
我这个软件里面也有一个键值是有换行的,但是我看注册表中的信息,居然是REG_SZ
类型,REG_SZ
类型不是单行吗?它是如何做到换行的???
对比了二进制文件,ASCII的abc
在HEX中为61,00,62,00,63
,每个字符中都有00作为间隔,如果没有,就会变成乱码了,这个要注意。
再来是ASCII中有换行的字符串:
a b c
在HEX中表述为:61,00,0d,00,0a,00,62,00,0d,00,0a,00,63,00,00,00
哈,这下知道是如果利用REG_SZ
来作换行的处理了!记住,就是0d 0a,0d
代表ASCII中的换行,0a
则代表new line。中间的多个00对就是补充间隔。
然后,我尝试在.reg
文件中写入REG_SZ
的类型值:"TestName"=hex(2):61,00,0d,00,0a,00,62,00,0d,00,0a,00,63,00,00,00
,写入后居然变成了REG_EXPAND_SZ
类型!这不是我想要的,想了一下,应该是hex(2)
的问题,hex(7)
更不可能了,那代表着REG_MULTI_SZ
类型。
爬文MSDN……爬文谷歌……结果:
hex(1):REG_SZ hex(2):REG_EXPAND_SZ hex(7):REG_MULTI_SZ
好了,豁然开朗,我终于明白注册表中的类型转换对应了。