Python winreg-如何将换行符写入REG_SZ值

问题描述 投票:0回答:1

在将换行符写入注册表值时,我需要一些帮助。值的类型为REG_SZ。

我可以通过在注册表中修改十六进制值时在每个中断位置添加一个“ 0A”来手动执行此操作,但是我不确定如何以编程方式执行此操作。

这是我当前的代码,用于将字符串写入注册表,该方法很有效,但不允许换行:

(标识信息,并缩短文本。“#”是换行符的位置)

import os
import _winreg
from _winreg import *

Key = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"
Field = [_winreg.REG_SZ, _winreg.REG_BINARY]
Sub_Key = ["legalnoticetext",
           "legalnoticecaption"]

value = ["Terms of Use",
        "By logging in to this PC, users agree to the Terms of Use"
        "\nThe User agrees to the following:#- The User may not alter, in any way, "
        "with Settings on this PC without the approval from any Authorised Persons."]

parmLen = len(Sub_Key)
z = 0  # Loop Counter for list iteration

try:
    Key = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"
    if not os.path.exists(Key):
        key = _winreg.CreateKey(HKEY_LOCAL_MACHINE, Key)
    Registrykey = OpenKey(HKEY_LOCAL_MACHINE, Key, 0, KEY_WRITE)
    while z < parmLen:
        _winreg.SetValueEx(Registrykey, Sub_Key[z], 0, Field[z], value[z])
        print ("Setting <" + Sub_Key[z] + "> with value: " + value[z])
        z += 1
    CloseKey(Registrykey)
    print ("SUCCESSFUL! Procedure: Show Logon Terms of Use")
except WindowsError:
    print ("Error")

我已经测试了以下代码来查看我是否可以直接用十六进制编写,因为我拥有修改后的十六进制值,但是它导致该值被解释为字符串,然后错误地设置了格式(再次)到十六进制。

import os
import _winreg
from _winreg import *

Key = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"
Field = [_winreg.REG_SZ, _winreg.REG_BINARY]
Sub_Key = ["legalnoticetext",
           "legalnoticecaption"]

value = ["Terms of Use",

         "42,00,79,00,20,00,6C,00,6F,00,67,00,67,00,69,00,6E,00,67,00,20,00,69,00,"
         "6E,00,20,00,74,00,6F,00,20,00,74,00,68,00,69,00,73,00,20,00,50,00,43,00,"
         "2C,00,20,00,75,00,73,00,65,00,72,00,73,00,20,00,61,00,67,00,72,00,65,00,"
         "65,00,20,00,74,00,6F,00,20,00,74,00,68,00,65,00,20,00,54,00,65,00,72,00,"
         "6D,00,73,00,20,00,6F,00,66,00,20,00,55,00,73,00,65,00,0A,00,54,00,68,00,"
         "65,00,20,00,55,00,73,00,65,00,72,00,20,00,61,00,67,00,72,00,65,00,65,00,"
         "73,00,20,00,74,00,6F,00,20,00,74,00,68,00,65,00,20,00,66,00,6F,00,6C,00,"
         "6C,00,6F,00,77,00,69,00,6E,00,67,00,3A,00,0A,00,2D,00,20,00,54,00,68,00,"
         "65,00,20,00,55,00,73,00,65,00,72,00,20,00,6D,00,61,00,79,00,20,00,6E,00,"
         "6F,00,74,00,20,00,61,00,6C,00,74,00,65,00,72,00,2C,00,20,00,69,00,6E,00,"
         "20,00,61,00,6E,00,79,00,20,00,77,00,61,00,79,00,2C,00,20,00,77,00,69,00,"
         "74,00,68,00,20,00,53,00,65,00,74,00,74,00,69,00,6E,00,67,00,73,00,20,00,"
         "6F,00,6E,00,20,00,74,00,68,00,69,00,73,00,20,00,50,00,43,00,20,00,77,00,"
         "69,00,74,00,68,00,6F,00,75,00,74,00,20,00,74,00,68,00,65,00,20,00,61,00,"
         "70,00,70,00,72,00,6F,00,76,00,61,00,6C,00,20,00,66,00,72,00,6F,00,6D,00,"
         "20,00,61,00,6E,00,79,00,20,00,41,00,75,00,74,00,68,00,6F,00,72,00,69,00,"
         "73,00,65,00,64,00,20,00,50,00,65,00,72,00,73,00,6F,00,6E,00,73,00,2E,00,"
         "00,00"]

parmLen = len(Sub_Key)
z = 0  # Loop Counter for list iteration

try:
    Key = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"
    if not os.path.exists(Key):
        key = _winreg.CreateKey(HKEY_LOCAL_MACHINE, Key)
    Registrykey = OpenKey(HKEY_LOCAL_MACHINE, Key, 0, KEY_WRITE)
    while z < parmLen:
        _winreg.SetValueEx(Registrykey, Sub_Key[z], 0, Field[z], value[z])
        print ("Setting <" + Sub_Key[z] + "> with value: " + value[z])
        z += 1
    CloseKey(Registrykey)
    print ("SUCCESSFUL! Procedure: Show Logon Terms of Use")
except WindowsError:
    print ("Error")

RTFM'ing并未证明对解决此特定问题非常有帮助,因此任何指导都将不胜感激!

python hex registry linefeed
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.