UDF > WinAPIEx > Registry >


_WinAPI_RegQueryMultipleValues

Obtient le type et les données pour une liste de noms de valeur associés à une clé de registre ouverte

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

Paramètres

$hKey Handle de la clé de registre ouverte. La clé doit avoir été ouverte avec le droit d'accès KEY_QUERY_VALUE.
Ce handle est retourné par la fonction _WinAPI_RegCreateKey() ou _WinAPI_RegOpenKey(). Il peut également être l'une des clés prédéfinies suivantes:
$HKEY_CLASSES_ROOT
$HKEY_CURRENT_CONFIG
$HKEY_CURRENT_USER
$HKEY_LOCAL_MACHINE
$HKEY_PERFORMANCE_DATA
$HKEY_USERS
$aValent Le tableau 2D ([valuename1, *, *, *], ..., [valuenameN, *, *, *]) qui contient les noms de valeur à rechercher.
En entrée, les éléments 1, 2, et 3 du tableau ne sont pas utilisés, mais les dimensions du tableau doivent être [n][4], sinon la fonction échoue.
En outre, cette fonction échoue si l'une des valeurs spécifiées n'existe pas dans la clé de registre spécifiée.
$pBuffer Un pointeur sur une mémoire tampon qui contient les données de registre. En règle générale, vous ne devriez pas utiliser ce tampon directement (voir remarques).
$iStart [optionnel] L'index du tableau où commencer la requête.
$iEnd [optionnel] L'index du tableau où arrêter la requête.

Valeur de retour

Succès: Retourne le nombre d'octets copiés dans la mémoire tampon. Le tableau $aValent contiendra les données suivantes:
[n][0] - Le nom de la valeur (reste inchangé).
[n][1] - La taille des données, en octets.
[n][2] - Le pointeur sur les données du tampon pointé par le paramètre $pBuffer.
[n][3] - Le type de données ($REG_*).
Échec: Définit @error <> 0, @extended peut contenir le code d'erreur du système.

Remarques

Pour éviter la sérialisation excessive, les données retournées par la fonction ne peuvent pas dépasser un mégaoctet.

Lorsque des données de registre retournées ne sont plus nécessaires, vous devez libérer la mémoire allouée pointée par le paramètre $pBuffer en appelant la fonction _WinAPI_FreeMemory().

En relation

_WinAPI_RegCreateKey, _WinAPI_RegOpenKey

Voir aussi

Consultez RegQueryMultipleValues dans la librairie MSDN.

Exemple

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

Local $aValent[19][4]

; Notez que si au moins l'un des noms de valeur suivants ne se trouve pas dans la clé de registre spécifiée, la fonction échoue!

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

Local $hKey = _WinAPI_RegOpenKey($HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders', $KEY_QUERY_VALUE)
If @error Then
    MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), @extended, _WinAPI_GetErrorMessage(@extended))
    Exit
EndIf

Local $pBuffer
_WinAPI_RegQueryMultipleValues($hKey, $aValent, $pBuffer)
If @error Then
    MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), @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')