I have made a function using WMI to read value in the registry.
Here is the code with examples.
 Code:
break on

$=SetOption( "Explicit", "ON" )
$=SetOption( "NoVarsInStrings", "ON" )
$=SetOption( "NoMacrosInStrings", "ON" )

global $HKEY_CLASSES_ROOT, $HKEY_CURRENT_USER, $HKEY_LOCAL_MACHINE
global $HKEY_USERS, $HKEY_CURRENT_CONFIG
$HKEY_CLASSES_ROOT    = (CDBL(2147483647)+1)        ; &80000000
$HKEY_CURRENT_USER    = (CDBL(2147483647)+2)        ; &80000001
$HKEY_LOCAL_MACHINE   = (CDBL(2147483647)+3)        ; &80000002
$HKEY_USERS           = (CDBL(2147483647)+4)        ; &80000003
$HKEY_CURRENT_CONFIG  = (CDBL(2147483647)+6)        ; &80000005

global $strComputer, $strRegKey, $strRegValueName, $strRegValueType, $RegValue, $tmp
$strComputer = "."

?
";--------------------------------------" ?
"; example 1 : REG_SZ" ?
";--------------------------------------" ?
$strRegKey = "System\CurrentControlSet\Services\TCPIP\Performance"
$strRegValueName = "Open"
$strRegValueType = "REG_SZ"

". SubKeyName : " $strRegKey ?
". ValueName  : " $strRegValueName ?

$RegValue = ReadRegistryValue( "HKLM", $strRegkey, $strRegValueName, $strRegValueType, $strComputer )
". value      : " $RegValue ?

$RegValue = ReadRegistryValue( $HKEY_LOCAL_MACHINE, $strRegkey, $strRegValueName, $strRegValueType, $strComputer )
". value      : " $RegValue ?


?
";--------------------------------------" ?
"; example 2 : REG_DWORD" ?
";--------------------------------------" ?
$strRegKey = "System\CurrentControlSet\Services\TCPIP\Performance"
$strRegValueName = "WbemAdapStatus"
$strRegValueType = "REG_DWORD"

". SubKeyName : " $strRegKey ?
". ValueName  : " $strRegValueName ?

$RegValue = ReadRegistryValue( "HKLM", $strRegkey, $strRegValueName, $strRegValueType, $strComputer )
". value      : " $RegValue ?
$RegValue = ReadRegistryValue( $HKEY_LOCAL_MACHINE, $strRegkey, $strRegValueName, $strRegValueType, $strComputer )
". value      : " $RegValue ?


?
";--------------------------------------" ?
"; example 3 : REG_BINARY" ?
";--------------------------------------" ?
$strRegKey = "System\CurrentControlSet\Services\TCPIP\Performance"
$strRegValueName = "WbemAdapFileSignature"
$strRegValueType = "REG_BINARY"

". SubKeyName : " $strRegKey ?
". ValueName  : " $strRegValueName ?

$RegValue = ReadRegistryValue( "HKLM", $strRegkey, $strRegValueName, $strRegValueType, $strComputer )
". value      : "
for each $tmp in $regvalue
    DecToHex($tmp) " "
next
?
$RegValue = ReadRegistryValue( $HKEY_LOCAL_MACHINE, $strRegkey, $strRegValueName, $strRegValueType, $strComputer )
". value      : "
for each $tmp in $regvalue
    DecToHex($tmp) " "
next
?


?
";--------------------------------------" ?
"; example 4 : REG_EXPAND_SZ" ?
";--------------------------------------" ?
$strRegKey = "System\CurrentControlSet\Services\TCPIP\Parameters"
$strRegValueName = "DataBasePath"
$strRegValueType = "REG_EXPAND_SZ"

". SubKeyName : " $strRegKey ?
". ValueName  : " $strRegValueName ?

$RegValue = ReadRegistryValue( "HKLM", $strRegkey, $strRegValueName, $strRegValueType, $strComputer )
". value      : " $RegValue ?
$RegValue = ReadRegistryValue( $HKEY_LOCAL_MACHINE, $strRegkey, $strRegValueName, $strRegValueType, $strComputer )
". value      : " $RegValue ?


?
";--------------------------------------" ?
"; example 5 : REG_MULTI_SZ" ?
";--------------------------------------" ?
$strRegKey = "SYSTEM\CurrentControlSet\Services\Eventlog\Security"
$strRegValueName = "Sources"
$strRegValueType = "REG_MULTI_SZ"

". SubKeyName : " $strRegKey ?
". ValueName  : " $strRegValueName ?

$RegValue = ReadRegistryValue( "HKLM", $strRegkey, $strRegValueName, $strRegValueType, $strComputer )
". value      : "
for each $tmp in $regvalue
    ? "  . " $tmp
next
?

$RegValue = ReadRegistryValue( $HKEY_LOCAL_MACHINE, $strRegkey, $strRegValueName, $strRegValueType, $strComputer )
". value      : "
for each $tmp in $regvalue
    ? "  . " $tmp
next
?

exit 0



;-------------------------------------------------------------------------------
;  function to read value in the registry (locally or remotely)
;-------------------------------------------------------------------------------
function ReadRegistryValue( $Hive, $strRegkey, $strRegValueName, $strRegType, optional $strComputer )
    dim $namespace, $objWMIService, $objRegistry, $hDefKey, $wmiclass, $wmimethod
    dim $objInParams, $objOutParams

    select
        case vartype($hive)=8
            select
                case $Hive = "HKEY_CLASSES_ROOT"    $hDefKey = (CDBL(2147483647)+1)    ; &80000000
                case $Hive = "HKCR"                 $hDefKey = (CDBL(2147483647)+1)    ; &80000000

                case $Hive = "HKEY_CURRENT_USER"    $hDefKey = (CDBL(2147483647)+2)    ; &80000001
                case $Hive = "HKCU"                 $hDefKey = (CDBL(2147483647)+2)    ; &80000001

                case $Hive = "HKEY_LOCAL_MACHINE"   $hDefKey = (CDBL(2147483647)+3)    ; &80000002
                case $Hive = "HKLM"                 $hDefKey = (CDBL(2147483647)+3)    ; &80000002

                case $Hive = "HKEY_USERS"           $hDefKey = (CDBL(2147483647)+4)    ; &80000003
                case $Hive = "HKUS"                 $hDefKey = (CDBL(2147483647)+4)    ; &80000003

                case $Hive = "HKEY_CURRENT_CONFIG"  $hDefKey = (CDBL(2147483647)+6)    ; &80000005
                case $Hive = "HKCC"                 $hDefKey = (CDBL(2147483647)+6)    ; &80000005

                case 1                              exit -1
            endselect

        case vartype($hive)=5
            $hDefKey = $hive

        case 1                                      exit -1
    endselect

    select
        case $strRegType = "REG_SZ"          $wmimethod = "GetStringValue"
        case $strRegType = "REG_EXPAND_SZ"   $wmimethod = "GetExpandedStringValue"
        case $strRegType = "REG_MULTI_SZ"    $wmimethod = "GetMultiStringValue"
        case $strRegType = "REG_DWORD"       $wmimethod = "GetDwordValue"
        case $strRegType = "REG_QWORD"       $wmimethod = "GetQwordValue"
        case $strRegType = "REG_BINARY"      $wmimethod = "GetBinaryValue"

        case 1                               exit -2
    endselect

    ;-- Connect to WMI --
    $namespace = "root\default"
    $objWMIService = GetObject('winmgmts:{impersonationLevel=impersonate,(debug,security)}!\\'+$strComputer+'\'+$namespace)
    $wmiclass = "StdRegProv"
    $objRegistry = $objWMIService.Get($wmiclass)

    $objInParams = $objRegistry.Methods_($wmimethod).InParameters.SpawnInstance_
    $objInParams.hDefKey = $hDefKey
    $objInParams.sSubKeyName = $strRegKey
    $objInParams.sValueName = $strRegValueName

    ;-- Execute the method to read value in the registry --
    $objOutParams = $objWMIService.ExecMethod( $wmiclass, $wmimethod, $objInParams )

    ;-- get the Value parameter that is returned by method --
    select
        case $strRegType = "REG_SZ"         $ReadRegistryValue = $objOutParams.sValue
        case $strRegType = "REG_EXPAND_SZ"  $ReadRegistryValue = $objOutParams.sValue
        case $strRegType = "REG_MULTI_SZ"   $ReadRegistryValue = $objOutParams.sValue
        case $strRegType = "REG_DWORD"      $ReadRegistryValue = $objOutParams.uValue
        case $strRegType = "REG_QWORD"      $ReadRegistryValue = $objOutParams.uValue
        case $strRegType = "REG_BINARY"     $ReadRegistryValue = $objOutParams.uValue
    endselect
endfunction

it is possible to find dynamically the type of a value but with wmi, it is not optimized. I should enum all values of a key to get value name AND type. Then find the requested value in the array of value names and the read type in the array of value type.
may be in a new version of the function (like ReadRegistryValueEx) !!!
_________________________
Christophe