Function Reference


_WinAPI_RegQueryMultipleValues

Retrieves the type and data for a list of value names associated with an open registry key

#include <WinAPIReg.au3>
_WinAPI_RegQueryMultipleValues ( $hKey, ByRef $aValent, ByRef $pBuffer [, $iStart = 0 [, $iEnd = -1]] )

Parameters

$hKey Handle to an open registry key. The key must have been opened with the KEY_QUERY_VALUE access right.
This handle is returned by the _WinAPI_RegCreateKey() or _WinAPI_RegOpenKey() function.
It can also be one of the following predefined keys :
    $HKEY_CLASSES_ROOT
    $HKEY_CURRENT_CONFIG
    $HKEY_CURRENT_USER
    $HKEY_LOCAL_MACHINE
    $HKEY_PERFORMANCE_DATA
    $HKEY_USERS
$aValent The 2D array ([valuename1, *, *, *], ... [valuenameN, *, *, *]) that contains a value names to be retrieved.
On input, 1, 2, and 3 array elements are not used, but array dimensions should be [n][4], otherwise the function fails.
Also, this function fails if any of the specified values do not exist in the specified registry key.
$pBuffer A pointer to a memory buffer that contains a registry data. Typically, you should not use this buffer directly (see remarks).
$iStart [optional] The index of array to start querying at.
$iEnd [optional] The index of array to stop querying at.

Return Value

Success: The number of bytes copied to the buffer. The $aValent array will contain the following data:
[n][0] - The name of the value (remain unchanged).
[n][1] - The size of the data, in bytes.
[n][2] - The pointer to the data in buffer pointed to by the $pBuffer parameter.
[n][3] - The type of data ($REG_*).
Failure: Sets the @error flag to non-zero, @extended flag may contain the system error code.

Remarks

To prevent excessive serialization, the aggregate data returned by the function cannot exceed one megabyte.

When a returned registry data are no longer needed, you must free the allocated memory pointed to by the $pBuffer parameter by calling the _WinAPI_FreeMemory() function.

Related

_WinAPI_RegCreateKey, _WinAPI_RegOpenKey

See Also

Search RegQueryMultipleValues in MSDN Library.

Example

#include <APIRegConstants.au3>
#include <Debug.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIError.au3>
#include <WinAPIMem.au3>
#include <WinAPIReg.au3>

Example()

Func Example()
        Local $aValent[19][4]

        ; Note that if at least one of the following value names is not found in the specified registry key, the function fails!

        ; 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'

        _DebugArrayDisplay($aValent, '_WinAPI_RegQueryMultipleValues')

        Local $hKey = _WinAPI_RegOpenKey($HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders', $KEY_QUERY_VALUE)
        If @error Then
                _DebugSetup(Default, True)
                _DebugReport("! RegOpenKey @error =" & @error & @CRLF & @TAB & _WinAPI_GetErrorMessage(@extended) & @CRLF)
                Exit
        EndIf

        Local $pBuffer
        _WinAPI_RegQueryMultipleValues($hKey, $aValent, $pBuffer)
        If @error Then
                _DebugSetup(Default, True)
                _DebugReport("! RegQueryMultipleValues @error =" & @error & @CRLF & @TAB & _WinAPI_GetErrorMessage(@extended) & @CRLF)
                Exit
        EndIf

        _WinAPI_RegCloseKey($hKey)

        _DebugArrayDisplay($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)

        _DebugArrayDisplay($aValent, '_WinAPI_RegQueryMultipleValues')

EndFunc   ;==>Example