2

我有一个经常在多台机器上使用的应用程序。我想导出我通常必须在每台机器上配置的注册表设置,以便我可以编写脚本以在启动时导入它们。该应用程序允许我将多行文本放入文本框中,该文本框将在所有打印输出上覆盖该文本。它将该文本保存在注册表中的字符串中。当我导出注册表时,字符串看起来像这样:

"sEndorsement"="Line 1 of text
Line 2 of Text"

由于字符串中的中断,这不能正确导入。有什么想法可以很好地进行导入吗?我真的没有选择在设置中只使用一行文本。

4

5 回答 5

5

而不是使用从导出设置中获得的标准 .reg 文件,您必须通过 VBScript 执行此操作,vbCrLf用于在字符串中引入换行符。

set ShellObj = CreateObject("WScript.Shell")
ShellObj.RegWrite "HKCU\Software\Key\sEndorsement", "Line1" & vbCrLf & "Line2", "REG_SZ"
于 2013-04-14T02:04:18.357 回答
0

假设应用程序及其代码是您的另一种方法是使用 .ini 文件或其他文本文件从标准位置(如 %user-folder%\your-app-name\settings.txt)保存和加载设置

于 2013-04-16T03:38:39.243 回答
0

如果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 中实现。

于 2013-04-17T22:30:34.280 回答
0

您可以使用_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")
于 2013-04-18T07:00:54.057 回答
0

vbCrLf正如其他人所提到的,您可以通过使用RegWrite 函数来使用 VBScript 。

或者,我不确定这是否可能在您的问题的上下文中,将注册表项类型更改为REG_MULTI_SZ而不是REG_SZ.

REG_MULTI_SZ字符串以 null 结尾,如下所示:

String 1\0String2\0String3\0

您可以在阅读注册表后浏览它们,然后在您的应用程序中使用换行符加入它们。

MSDN 对这些工作原理和代码示例有很好的描述。

于 2013-04-18T17:26:01.290 回答