我有一个经常在多台机器上使用的应用程序。我想导出我通常必须在每台机器上配置的注册表设置,以便我可以编写脚本以在启动时导入它们。该应用程序允许我将多行文本放入文本框中,该文本框将在所有打印输出上覆盖该文本。它将该文本保存在注册表中的字符串中。当我导出注册表时,字符串看起来像这样:
"sEndorsement"="Line 1 of text
Line 2 of Text"
由于字符串中的中断,这不能正确导入。有什么想法可以很好地进行导入吗?我真的没有选择在设置中只使用一行文本。
而不是使用从导出设置中获得的标准 .reg 文件,您必须通过 VBScript 执行此操作,vbCrLf
用于在字符串中引入换行符。
set ShellObj = CreateObject("WScript.Shell")
ShellObj.RegWrite "HKCU\Software\Key\sEndorsement", "Line1" & vbCrLf & "Line2", "REG_SZ"
假设应用程序及其代码是您的另一种方法是使用 .ini 文件或其他文本文件从标准位置(如 %user-folder%\your-app-name\settings.txt)保存和加载设置
如果key=value的第一行(或唯一一行)总是以双引号开头,那么您的导入代码可以检测到这一点。伪代码:
firstLine = TRUE
keyAndValue = NULL
for each line to import
line = get line
if line[0] == '"' then
if have previous line
import keyAndValue
keyAndValue = line
else
keyAndValue = concat(keyAndValue, CRLF, line)
end for
if keyAndValue is not NULL
import keyAndValue
如前所述,这可以在 VBScript 或 Perl 中实现。
您可以使用_winreg模块执行一个 Python 脚本。一些片段:
from _winreg import *
#read Data:
key = OpenKey(HKEY_LOCAL_MACHINE, r'Software\MyCompany\MyApp', 0, KEY_ALL_ACCESS)
value_data = QueryValueEx(key, "MyValueName")[0]
#write data:
key = OpenKey(HKEY_LOCAL_MACHINE, r'Software\MyCompany\MyApp', 0, KEY_WRITE)
SetValueEx(key, "MyValueName", 0, REG_SZ, "MyValueData")
vbCrLf
正如其他人所提到的,您可以通过使用RegWrite 函数来使用 VBScript 。
或者,我不确定这是否可能在您的问题的上下文中,将注册表项类型更改为REG_MULTI_SZ
而不是REG_SZ
.
REG_MULTI_SZ
字符串以 null 结尾,如下所示:
String 1\0String2\0String3\0
您可以在阅读注册表后浏览它们,然后在您的应用程序中使用换行符加入它们。
MSDN 对这些工作原理和代码示例有很好的描述。