Funktionreferenz


_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]] )

Parameter

$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.

Rückgabewert

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.

Bemerkungen

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.

Verwandte Funktionen

_WinAPI_RegCreateKey, _WinAPI_RegOpenKey

Siehe auch

Suche nach RegQueryMultipleValues in der MSDN Bibliothek.

Beispiel

#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