1 Windows注册表
很多程序将配置保存在注册表中方便读取。
注册表是一个树状结构,每一个节点可以有子节点,并且每个节点可以有自己的值。这些值就是程序保存在注册表中的配置信息,值有名词、类型和数值三个属性。
1.1 值类型
其中类型表示保存值的类型,常见的类型有:
类型 | 说明 |
---|---|
REG_BINARY | 二进制数据 |
REG_DWORD | 32位数字 |
REG_DWORD_LITTLE_ENDIAN | 小端格式的 32位数字,等价于 REG_DWORD |
REG_DWORD_BIG_ENDIAN | 大端格式的 32位数字 |
REG_QWORD | 64位数字 |
REG_QWORD_LITTLE_ENDIAN | 小端格式的 64位数字,等价于 REG_QWORD |
REG_SZ | C语言字符串(以 \0 结尾) |
REG_EXPAND_SZ | C语言字符串(以 \0 结尾),可以在字符串中使用环境变量,比如 %temp% |
REG_MULTI_SZ | C语言字符串序列(注意不是数组),以两个 \0 结尾 |
REG_LINK | Unicode 编码的符号链接 |
REG_NONE | 未定义的类型 |
所有的字符串类型中都可以使用系统默认参数,系统默认参数以 %
开头,他们的作用分别是:
%1 表示程序操作的文件
%2 表示系统默认的打印机
%3 表示资料扇区
%4 表示操作的Port端口
"%v" 程序操作的路径
1.2 目录结构
HKEY_LOCAL_MACHINE
主键是此计算机上的所有用户共享的注册表键值,而 HKEY_CURRENT_USER
是当前用户使用的注册表键值。而我们在注册表的 HKEY_CLASSES_ROOT
中也可以看到跟HKEY_LOCAL_MACHINE\Software\Classes
和 HKEY_CURRENT_USER\Software\Classes
中一样的文件关联项,是因为 HKEY_CLASSES_ROOT
是 HKEY_LOCAL_MACHINE\Software\Classes
和 HKEY_CURRENT_USER\Software\Classes
合并之后的一个视图,其中用户键值会覆盖此计算机上的相同键值。因此我们不能直接修改 HKEY_CLASSES_ROOT
中的值,而是要在 HKEY_CURRENT_USER\Software\Classes
或者 HKEY_CURRENT_USER\Software\Classes
中修改,通常建议在 HKEY_CURRENT_USER
下修改,因为这样不需要管理员权限。
2 python操作注册表
警告:如果你不知道注册表中的项是干什么的,千万不要随便修改和删除已经存在的注册表项,否则可能导致系统崩溃!!
winreg是 python自带的模块,可以通过 winreg对注册表的值进行添加、删除和修改操作。
在继续了解 winreg的用法之前我们需要了解一些概念的对应关系,winreg中用 key来表示注册表中的项。key可以是一个路径,当 key是一个路径时 key所表示的就是路径的最后一个项,比如 HKEY_CURRENT_USER\Software\Classes
表示的就是 HKEY_CURRENT_USER
下 Software
下的