$keys = $registry->EnumValuesEx(Registry::HKCU, $test_key);
check_error();
echo "Created RegistryValue objects :{$eol}";
foreach ($keys as $value) {
    echo "{$tab}" . str_replace("{$eol}", "{$eol}{$tab}", print_r($value, true));
}
// 7) Retrieve created key values - You must known the type of each key before doing that, or else use the GetValue() method,
//    which works only on REG_SZ, REG_EXPAND_SZ, REG_DWORD and REG_BINARY types.
echo "Created values :{$eol}";
echo "{$tab}{$test_key}/BinaryValueFromArray     : " . $registry->GetBinaryValue(Registry::HKCU, $test_key, 'BinaryValueFromArray') . $eol;
echo "{$tab}{$test_key}/BinaryValueFromHexString : " . $registry->GetBinaryValue(Registry::HKCU, $test_key, 'BinaryValueFromHexString') . $eol;
echo "{$tab}{$test_key}/BinaryValueFromString    : " . $registry->GetBinaryValue(Registry::HKCU, $test_key, 'BinaryValueFromString') . $eol;
echo "{$tab}{$test_key}/DWORDValue               : 0x" . sprintf("%08X", $registry->GetDWORDValue(Registry::HKCU, $test_key, 'DWORDValue')) . $eol;
echo "{$tab}{$test_key}/ExpandedStringValue      : " . $registry->GetExpandedStringValue(Registry::HKCU, $test_key, 'ExpandedStringValue') . $eol;
echo "{$tab}{$test_key}/BinaryValueFromHexString : " . $registry->GetBinaryValue(Registry::HKCU, $test_key, 'BinaryValueFromHexString') . $eol;
echo "{$tab}{$test_key}/MultiStringValueMultiple : " . implode(', ', $registry->GetMultiStringValue(Registry::HKCU, $test_key, 'MultiStringValueMultiple')) . $eol;
echo "{$tab}{$test_key}/MultiStringValueSingle   : " . implode(', ', $registry->GetMultiStringValue(Registry::HKCU, $test_key, 'MultiStringValueSingle')) . $eol;
echo "{$tab}{$test_key}/MultiStringValueMultiple : " . implode(', ', $registry->GetMultiStringValue(Registry::HKCU, $test_key, 'MultiStringValueMultiple')) . $eol;
echo "{$tab}{$test_key}/QWORDBigValue            : " . $registry->GetQWORDValue(Registry::HKCU, $test_key, 'QWORDBigValue') . $eol;
echo "{$tab}{$test_key}/QWORDValue               : " . $registry->GetQWORDValue(Registry::HKCU, $test_key, 'QWORDValue') . $eol;
echo "{$tab}{$test_key}/StringValue              : " . $registry->GetQWORDValue(Registry::HKCU, $test_key, 'StringValue') . $eol;
echo "{$tab}{$test_key}/WShellDWORDValue         : 0x" . sprintf("%08X", $registry->GetValue(Registry::HKCU, $test_key, 'WShellDWORDValue')) . $eol;
// Note that the GetValue() method for WShell does not seem to process variable expansion
echo "{$tab}{$test_key}/WShellExpandedStringValue: " . $registry->GetValue(Registry::HKCU, $test_key, 'WShellExpandedStringValue') . $eol;
echo "{$tab}{$test_key}/WShellStringValue        : " . $registry->GetValue(Registry::HKCU, $test_key, 'WShellStringValue') . $eol;
// 8) Delete a subkey (HKCU\TestRegistry\Values\WShellExpandedStringValue key)
$registry->DeleteValue(Registry::HKCU, $test_key, 'WShellExpandedStringValue');
check_error();
// 9) Delete the test subkey - leads to an error, since a key can only be deleted if it has no subkeys - so you'll have to delete TestRegistry manually under HKCU
$registry->DeleteKey(Registry::HKCU, 'TestRegistry');
check_error();