# win.reg 库模块帮助文档

## win 成员列表 <a id="win" href="#win">&#x23;</a>

### win.reg() <a id="win.reg" href="#win.reg">&#x23;</a>
[返回对象:winRegObject](#winRegObject)

### win.reg(path) <a id="win.reg" href="#win.reg">&#x23;</a>
打开或创建注册表路径，  
@path 参数指定注册表路径。  

此函数还有其他可选参数，一般不必指定

### win.reg(path,true) <a id="win.reg" href="#win.reg">&#x23;</a>
仅打开已存在的注册表路径，  
@path 参数指定注册表路径。  

此函数还有其他可选参数，一般不必指定

### win.regReader("HKEY_CURRENT_USER") <a id="win.regReader" href="#win.regReader">&#x23;</a>
仅仅以只读模式打开存在的注册表路径,如果不存在返回null  
此函数显式指定只读权限速度较快

### win.regReader() <a id="win.regReader" href="#win.regReader">&#x23;</a>
[返回对象:winRegObject](#winRegObject)

### win.regReaderWow64("HKEY_LOCAL_MACHINE") <a id="win.regReaderWow64" href="#win.regReaderWow64">&#x23;</a>
在64位系统中访问64位注册表,  
32位系统作用与 win.regReader 相同,  
仅仅以只读模式打开存在的注册表路径,如果不存在返回nulll  
此函数显式指定只读权限速度较快

### win.regReaderWow64() <a id="win.regReaderWow64" href="#win.regReaderWow64">&#x23;</a>
[返回对象:winRegObject](#winRegObject)

### win.regWow32("HKEY_LOCAL_MACHINE") <a id="win.regWow32" href="#win.regWow32">&#x23;</a>
打开已存在或创建新的注册表路径,  
在64位系统中访问32位注册表,  
32位系统下作用与 win.reg 相同

### win.regWow32("HKEY_LOCAL_MACHINE",true) <a id="win.regWow32" href="#win.regWow32">&#x23;</a>
仅仅打开存在的注册表路径,  
在64位系统中访问32位注册表,  
32位系统下作用与 win.reg 相同,  
如果不存在返回null

### win.regWow32() <a id="win.regWow32" href="#win.regWow32">&#x23;</a>
[返回对象:winRegObject](#winRegObject)

### win.regWow64("HKEY_LOCAL_MACHINE") <a id="win.regWow64" href="#win.regWow64">&#x23;</a>
打开已存在或创建新的注册表路径,  
在64位系统中访问64位注册表,  
32位系统下作用与 win.reg 相同

### win.regWow64("HKEY_LOCAL_MACHINE",true) <a id="win.regWow64" href="#win.regWow64">&#x23;</a>
仅仅打开存在的注册表路径,  
在64位系统中访问64位注册表,  
32位系统下作用与 win.reg 相同,  
如果不存在返回null

### win.regWow64() <a id="win.regWow64" href="#win.regWow64">&#x23;</a>
[返回对象:winRegObject](#winRegObject)

## win.reg 成员列表 <a id="win.reg" href="#win.reg">&#x23;</a>

注册表操作

打开或创建注册表路径

### win.reg.overrideClasses(runas,proc) <a id="win.reg.overrideClasses" href="#win.reg.overrideClasses">&#x23;</a>

```aardio
win.reg.overrideClasses(false,  
	function(){  
		/*重定向HKEY_CLASSES_ROOT到HKEY_CURRENT_USER\Software\Classes*/  
	}  
)
```

### win.reg.overridePredefinedKey("根键","重定向键",回调函数) <a id="win.reg.overridePredefinedKey" href="#win.reg.overridePredefinedKey">&#x23;</a>

```aardio
win.reg.overridePredefinedKey("HKEY_CLASSES_ROOT","HKEY_CURRENT_USER\Software\Classes",  
    function(){  
        /*注册表已成功重定向*/  
    }  
);
```

### win.reg.query <a id="win.reg.query" href="#win.reg.query">&#x23;</a>
直接读取注册表路径的指定值

### win.reg.query(path,valueName) <a id="win.reg.query" href="#win.reg.query">&#x23;</a>
返回 @path 参数指定的注册表路径下   
 @valueName 指定名字的值,失败返回 null

### win.reg.queryWow64 <a id="win.reg.queryWow64" href="#win.reg.queryWow64">&#x23;</a>
直接读取注册表路径的指定值,  
在64位系统访问64位注册表,兼容 32 位系统

### win.reg.queryWow64(path,valueName) <a id="win.reg.queryWow64" href="#win.reg.queryWow64">&#x23;</a>
返回 @path 参数指定的注册表路径下  
@valueName 指定名字的值,失败返回 null  
在64位系统访问64位注册表,兼容 32 位系统

## winRegObject 成员列表 <a id="winRegObject" href="#winRegObject">&#x23;</a>

### winRegObject.close() <a id="winRegObject.close" href="#winRegObject.close">&#x23;</a>
关闭注册表对象

### winRegObject.delKey("字符串参数") <a id="winRegObject.delKey" href="#winRegObject.delKey">&#x23;</a>
删除不包含子项的键

### winRegObject.delKeyTree("字符串参数") <a id="winRegObject.delKeyTree" href="#winRegObject.delKeyTree">&#x23;</a>
删除包含子项的键,  
请慎用以避免删除重要的注册表键

### winRegObject.delValue("字符串参数") <a id="winRegObject.delValue" href="#winRegObject.delValue">&#x23;</a>
删除值，  
参数 @1 指定值名称（null 或 空串表示默认值）。

### winRegObject.eachKey <a id="winRegObject.eachKey" href="#winRegObject.eachKey">&#x23;</a>

```aardio
for(name,writeTime in reg.eachKey() ){
	var subKey = reg.open(name); 
	/*name 为子键名,  
writeTime 为 ::FILETIME 结构体,  
可用 fsys.time 解析*/
	subKey.close()
}
```

### winRegObject.eachValue <a id="winRegObject.eachValue" href="#winRegObject.eachValue">&#x23;</a>

```aardio
for(name,value,t in reg.eachValue()) {

}
```

### winRegObject.enumKey <a id="winRegObject.enumKey" href="#winRegObject.enumKey">&#x23;</a>

```aardio
winRegObject.enumKey(  

	function(  
		subKey, /*这是某个子节点(win.reg对象)*/  
		keyname/*这是reg子节点的一个子项的名字*/  
	){    
		if( subKey.delKey(keyname)  )  
			io.print("删除" + keyname + "成功")   
	}    
)
```

### winRegObject.keys() <a id="winRegObject.keys" href="#winRegObject.keys">&#x23;</a>
获取所有子键的键名

### winRegObject.load("/backup") <a id="winRegObject.load" href="#winRegObject.load">&#x23;</a>
从文件导入到注册表

### winRegObject.open("字符串参数") <a id="winRegObject.open" href="#winRegObject.open">&#x23;</a>
打开已存在或创建新的子路径,  
返回新的win.reg对象,

### winRegObject.open("字符串参数",true) <a id="winRegObject.open" href="#winRegObject.open">&#x23;</a>
仅仅打开已存在的子路径,  
返回新的win.reg对象,  
如果不存在返回null

### winRegObject.open() <a id="winRegObject.open" href="#winRegObject.open">&#x23;</a>
[返回对象:winRegObject](#winRegObject)

### winRegObject.path <a id="winRegObject.path" href="#winRegObject.path">&#x23;</a>
注册表路径

### winRegObject.queryTable(names,...) <a id="winRegObject.queryTable" href="#winRegObject.queryTable">&#x23;</a>
遍历当前注册表项的所有子项,  
获取 @names 指定名称的所有值,  
@names 可以是名称数组,也可以是多个字符串参数,  
返回值是表,表的键为子项名称，值为包含各子项名值对的表,  
如果子项第一个值名称对应的值为 null 则忽略该项,  
失败返回 null

### winRegObject.queryValue("字符串参数") <a id="winRegObject.queryValue" href="#winRegObject.queryValue">&#x23;</a>
查询值，  
参数 @1 指定值名称（null 或 空串表示默认值）。  
成功返回值1为查询到的数据值，返回值2为一个表示值类型的数值，  
自动识别类型:  
REG_SZ,REG_EXPAND_SZ 类型返回字符串,  
REG_EXPAND_SZ 字符串可用 string.expand 函数展开,  
REG_MULTE_SZ 类型返回字符串数组，  
REG_BINARY类型返回buffer对象,REG_DWORD类型返回数值，  
REG_QWORD类型返回math.size64对象表示的64位无符号长整数，  
REG_DWORD，REG_DWORD_BIG_ENDIAN类型返回数值

### winRegObject.queryValueTable <a id="winRegObject.queryValueTable" href="#winRegObject.queryValueTable">&#x23;</a>
返回表，包含当前键的指定名值对

### winRegObject.queryValueTable() <a id="winRegObject.queryValueTable" href="#winRegObject.queryValueTable">&#x23;</a>
返回表，包含当前键的所有名值对

### winRegObject.queryValueTable(default) <a id="winRegObject.queryValueTable" href="#winRegObject.queryValueTable">&#x23;</a>
参数 @default 指定默认值  
在参数 @1 中填入当前键的所有名值对  
返回参数 @1

### winRegObject.queryValueTable(names,...) <a id="winRegObject.queryValueTable" href="#winRegObject.queryValueTable">&#x23;</a>
返回表，包含当前键的指定名值对  
@names 参数可以是一个要查询的值名称数组,  
也可以是用于指定查询值名称的一个或多个字符串参数,  
第一个值名称指定的值为 null 则返回 null,

### winRegObject.renameKey("字符串参数") <a id="winRegObject.renameKey" href="#winRegObject.renameKey">&#x23;</a>
重命名当前打开的键  
参数只要写新的键名就可以,不要在参数中写包含反斜杠的注册表路径

### winRegObject.save("/backup") <a id="winRegObject.save" href="#winRegObject.save">&#x23;</a>
导出注册表到文件

### winRegObject.setBinValue(name,vlaue) <a id="winRegObject.setBinValue" href="#winRegObject.setBinValue">&#x23;</a>
设置二进制值，  
参数 @1 指定值名称（null 或 空串表示默认值），  
参数 @2 指定要存储的值

### winRegObject.setDwValue(name,vlaue) <a id="winRegObject.setDwValue" href="#winRegObject.setDwValue">&#x23;</a>
设置32位数值,  
参数 @1 指定值名称（null 或 空串表示默认值），  
参数 @2 指定要存储的值

### winRegObject.setDwValueBigEndian(name,vlaue) <a id="winRegObject.setDwValueBigEndian" href="#winRegObject.setDwValueBigEndian">&#x23;</a>
设置大端序 32 位数值，  
参数 @1 指定值名称（null 或 空串表示默认值），  
参数 @2 指定要存储的值

### winRegObject.setExpandValue(name,vlaue) <a id="winRegObject.setExpandValue" href="#winRegObject.setExpandValue">&#x23;</a>
设置含环境变量的字符串值,  
参数 @1 指定值名称（null 或 空串表示默认值），  
参数 @2 指定要存储的值

### winRegObject.setMultiSzValue(name,vlaue) <a id="winRegObject.setMultiSzValue" href="#winRegObject.setMultiSzValue">&#x23;</a>
设置复合字符串值，  
参数 @1 指定值名称（null 或 空串表示默认值），  
参数 @2 可用字符串数组指定要存储的值，  
也可以用多个参数传递多个字符串值

### winRegObject.setQwValue(name,vlaue) <a id="winRegObject.setQwValue" href="#winRegObject.setQwValue">&#x23;</a>
设置64位数值,  
参数 @1 指定值名称（null 或 空串表示默认值），  
参数 @2 支持 math.size64 对象表示的 64 位长整数或普通数值

### winRegObject.setSzValue(name,vlaue) <a id="winRegObject.setSzValue" href="#winRegObject.setSzValue">&#x23;</a>
设置字符串值,  
参数 @1 指定值名称（null 或 空串表示默认值），  
参数 @2 指定要存储的值

### winRegObject.setValue(name,vlaue) <a id="winRegObject.setValue" href="#winRegObject.setValue">&#x23;</a>
设置注册表值，自动设置类型，  
参数 @1 指定值名称（null 或 空串表示默认值），  
参数 @2 指定要存储的值

### 自动完成常量
_REG_BINARY=3  
_REG_CREATED_NEW_KEY=1  
_REG_DWORD=4  
_REG_DWORD_BIG_ENDIAN=5  
_REG_DWORD_LITTLE_ENDIAN=4  
_REG_EXPAND_SZ=2  
_REG_FULL_RESOURCE_DESCRIPTOR=9  
_REG_LINK=6  
_REG_MULTI_SZ=7  
_REG_NONE=0  
_REG_NOTIFY_CHANGE_ATTRIBUTES=2  
_REG_NOTIFY_CHANGE_LAST_SET=4  
_REG_NOTIFY_CHANGE_NAME=1  
_REG_NOTIFY_CHANGE_SECURITY=8  
_REG_OPENED_EXISTING_KEY=2  
_REG_OPTION_BACKUP_RESTORE=4  
_REG_OPTION_CREATE_LINK=2  
_REG_OPTION_NON_VOLATILE=0  
_REG_OPTION_RESERVED=0  
_REG_OPTION_VOLATILE=1  
_REG_QWORD=0xB  
_REG_REFRESH_HIVE=2  
_REG_RESOURCE_LIST=8  
_REG_RESOURCE_REQUIREMENTS_LIST=0xA  
_REG_SZ=1  
_REG_WHOLE_HIVE_VOLATILE=1  
