检索注册表键的类型和名称值列表数据.
#Include <WinAPIEx.au3>
_WinAPI_RegQueryMultipleValues ( $hKey, ByRef $aValent, ByRef $pBuffer [, $iStart [, $iEnd]] )
$hKey | 注册表键句柄.注册表键必须有 KEY_QUERY_VALUE 存取权限. 句柄有 _WinAPI_RegCreateKey() 或 _WinAPI_RegOpenKey() 函数返回. 也可以是下列预定义键之一 $HKEY_CLASSES_ROOT $HKEY_CURRENT_CONFIG $HKEY_CURRENT_USER $HKEY_LOCAL_MACHINE $HKEY_PERFORMANCE_DATA $HKEY_USERS |
$aValent | 二维数组 ([valuename1, 0, 0, 0], [valuename2, 0, 0, 0], ... [valuenameN, 0, 0, 0]),包含被检索的名称值. 不使用数组元素 1, 2, 与 3, 但该数组的大小应该是 [n][4], 否则, 函数将失败. 此外,如果指定键不存在任何指定值,此函数同样失败. |
$pBuffer | A pointer to a memory buffer that contains a registry data. Typically, you should not use this buffer directly (see remarks). |
$iStart | [可选参数] 开始检索的数组索引. |
$iEnd | [可选参数] 结束检索的数组索引. |
成功: | 返回复制到缓冲区的字节数. $aValent 数组将包含以下数据: |
[n][0] | 名称值 (未改变的). |
[n][1] | 数据字节大小. |
[n][2] | 指向 $tData 参数值的缓冲区数据指针. |
[n][3] | 数据类型 ($REG_*). |
失败: | 返回 0,设置@error:非 0 值, @extended 可能包含系统错误代码. |
在MSDN中搜索
#Include <APIConstants.au3>
#Include <Array.au3>
#Include <WinAPIEx.au3>
Opt('MustDeclareVars', 1)
Global $aValent[19][4], $hKey, $tData
; 注意如果下列值名称有一个没有在指定的注册表键中找到, 函数会失败!
; HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
$aValent[0 ][0] = 'AppData'
$aValent[1 ][0] = 'Cache'
$aValent[2 ][0] = 'Cookies'
$aValent[3 ][0] = 'Desktop'
$aValent[4 ][0] = 'Favorites'
$aValent[5 ][0] = 'History'
$aValent[6 ][0] = 'Local AppData'
$aValent[7 ][0] = 'My Music'
$aValent[8 ][0] = 'My Pictures'
$aValent[9 ][0] = 'My Video'
$aValent[10][0] = 'NetHood'
$aValent[11][0] = 'Personal'
$aValent[12][0] = 'PrintHood'
$aValent[13][0] = 'Programs'
$aValent[14][0] = 'Recent'
$aValent[15][0] = 'SendTo'
$aValent[16][0] = 'Start Menu'
$aValent[17][0] = 'Startup'
$aValent[18][0] = 'Templates'
_ArrayDisplay($aValent, '_WinAPI_RegQueryMultipleValues')
$hKey = _WinAPI_RegOpenKey($HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders', $KEY_QUERY_VALUE)
If @error Then
MsgBox(16, @extended, _WinAPI_GetErrorMessage(@extended))
Exit
EndIf
_WinAPI_RegQueryMultipleValues($hKey, $aValent, $pBuffer)
If @error Then
MsgBox(16, @extended, _WinAPI_GetErrorMessage(@extended))
Exit
EndIf
_WinAPI_RegCloseKey($hKey)
_ArrayDisplay($aValent, '_WinAPI_RegQueryMultipleValues')
For $i = 0 To UBound($aValent) - 1
$aValent[$i][2] = DllStructGetData(DllStructCreate('wchar[' & $aValent[$i][1] & ']', $aValent[$i][2]), 1)
Next
_WinAPI_FreeMemory($pBuffer)
_ArrayDisplay($aValent, '_WinAPI_RegQueryMultipleValues')