Here's a modified version that works exactly like the built in ReadValue(). (Not throughly tested)

 Code:
function WMIReadValue($strRegkey, $strRegValueName )
    dim $namespace, $objWMIService, $objRegistry
    dim $hDefKey, $arrValuesName, $arrValuesType, $RegType, $wmiclass, $wmimethod
    dim $objInParams, $objOutParams, $Parts, $counter, $tempkey
	
    $Parts=Split($strRegKey,"\")
    if $parts[0]="" and $parts[1]=""
      $strComputer=$parts[2]
      $counter=3
    else
      $strComputer= "."
    endif
    
    $hive=$parts[0+$counter]
    
    for $i=$counter+1 to ubound($parts)
      $tempkey=$tempkey + $parts[$i] + "\"
    next
    $strRegkey=left($tempkey,-1)

    $WMIReadValue = ""
    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

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

    $wmimethod = "EnumValues"
    $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 )

    if $objOutParams.ReturnValue <> 0
        exit -3
    endif

    ;-- search $strRegValueName in the array of value name returned --
    $arrValuesName = $objOutParams.sNames
    $arrValuesType = $objOutParams.Types

    dim $i, $imax, $found
    $found = 0
    $i = -1
    $imax = UBound($arrValuesName)
    while  $i < $imax
        $i = $i + 1
        if $strRegValueName = $arrValuesName[$i]
            $RegType = $arrValuesType[$i]

            select
                case $RegType = 1   $wmimethod = "GetStringValue"
                case $RegType = 2   $wmimethod = "GetExpandedStringValue"
                case $RegType = 7   $wmimethod = "GetMultiStringValue"
                case $RegType = 4   $wmimethod = "GetDwordValue"
                case $RegType = 11  $wmimethod = "GetQwordValue"
                case $RegType = 3   $wmimethod = "GetBinaryValue"
            endselect
            $i = $imax
            $found = 1
        endif
    loop

    if not $found
        exit -4
    endif


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

    if $objOutParams.ReturnValue <> 0
        exit $objOutParams.ReturnValue
    endif

    ;-- get the Value parameter that is returned by method --
    select
        case $RegType = 1  $WMIReadValue = $objOutParams.sValue
        case $RegType = 2  $WMIReadValue = $objOutParams.sValue
        case $RegType = 7  $WMIReadValue = $objOutParams.sValue
        case $RegType = 4  $WMIReadValue = $objOutParams.uValue
        case $RegType = 11 $WMIReadValue = $objOutParams.uValue
        case $RegType = 3  $WMIReadValue = $objOutParams.uValue
    endselect

    exit 0
endfunction