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

Python winreg-如何将换行写入REG_SZ值,python,hex,registry,linefeed,Python,Hex,Registry,Linefeed,我需要一些帮助来向注册表值写入换行符。该值的类型为REG_SZ 在注册表中修改十六进制值时,我可以通过向每个中断位置添加“0A”手动完成此操作,但我不确定如何以编程方式完成此操作 这是我当前将字符串写入注册表的代码,它可以工作,但不允许换行: (对标识信息进行编辑,并缩短文本。“#”是换行符的位置) 导入操作系统 导入_winreg 从winreg导入* Key=r“软件\Microsoft\Windows\CurrentVersion\Policys\System” 字段=[\u winreg

我需要一些帮助来向注册表值写入换行符。该值的类型为REG_SZ

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

这是我当前将字符串写入注册表的代码,它可以工作,但不允许换行:

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

导入操作系统
导入_winreg
从winreg导入*
Key=r“软件\Microsoft\Windows\CurrentVersion\Policys\System”
字段=[\u winreg.REG\u SZ,\u winreg.REG\u二进制]
Sub_Key=[“legalnoticetext”,
“法律公告选项”]
值=[“使用条款”,
“通过登录到此电脑,用户同意使用条款”
\n用户同意以下内容:#-用户不得以任何方式更改
“未经任何授权人员批准,在本电脑上进行设置。”]
parmLen=len(子键)
z=0#列表迭代的循环计数器
尝试:
Key=r“软件\Microsoft\Windows\CurrentVersion\Policys\System”
如果操作系统路径不存在(键):
key=\u winreg.CreateKey(HKEY\u本地\u机器,key)
Registrykey=OpenKey(HKEY_本地_机器,密钥,0,密钥写入)
而z
我测试了以下代码以查看是否可以直接用十六进制编写,因为我修改了十六进制值,但它会导致值被解释为字符串,然后将其错误地(再次)格式化为十六进制

导入操作系统
导入_winreg
从winreg导入*
Key=r“软件\Microsoft\Windows\CurrentVersion\Policys\System”
字段=[\u winreg.REG\u SZ,\u winreg.REG\u二进制]
Sub_Key=[“legalnoticetext”,
“法律公告选项”]
值=[“使用条款”,
42,00,79,00,20,00,6C,00,6F,00,67,00,67,00,69,00,6E,00,67,00,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,00,43,00,20,00,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,00,6F,00,6E,00,73,00,2E,00”
"00,00"]
parmLen=len(子键)
z=0#列表迭代的循环计数器
尝试:
Key=r“软件\Microsoft\Windows\CurrentVersion\Policys\System”
如果操作系统路径不存在(键):
key=\u winreg.CreateKey(HKEY\u本地\u机器,key)
Registrykey=OpenKey(HKEY_本地_机器,密钥,0,密钥写入)
而z

RTFM'ing在这个具体问题上并没有太大帮助,所以任何指导都将不胜感激

你有几个问题
os.path.exists
检查文件路径是否存在。输入键字符串不会检查注册表

看起来你正在使用Python 2.7,请考虑升级到3。您遇到的问题是编写

REG\u二进制文件
需要二进制数据;在Python3中,这意味着您只需要对字符串进行编码。下面是Python 3中的代码

导入winreg
Key\u str=r“软件\Microsoft\Windows\CurrentVersion\Policys\System”
字段=[winreg.REG\u SZ,winreg.REG\u二进制]
子_键=[“法律公告文本”,“法律公告选项”]
值=[“使用条款”,
“通过登录到此电脑,用户同意使用条款”
\n用户同意以下内容:#-用户不得以任何方式更改
“未经任何授权人员批准,在本电脑上进行设置。”]
尝试:
key=winreg.OpenKey(winreg.HKEY\u LOCAL\u MACHINE,key\u str)
除FileNotFoundError外:
key=winreg.CreateKey(winreg.HKEY\u LOCAL\u MACHINE,key\u str)
对于zip中的sk、f、v(子键、字段、值):
如果f==winreg.REG\u二进制:
winreg.SetValueEx(键,sk,0,f,v.encode('latin-1'))
其他:
winreg.SetValueEx(键,sk,0,f,v)
key.Close()
在Python2中,标准字符串是字节字符串,因此不需要将字符串编码为字节编码。以下是Python 2代码:

import\u winreg
Key\u str=r“软件\Microsoft\Windows\CurrentVersion\Policys\System”
字段=[\u winreg.REG\u SZ,\u winreg.REG\u二进制]
子_键=[“法律公告文本”,“法律公告选项”]
值=[“使用条款”,
“通过登录到此电脑,用户同意使用条款”
“\n
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")