Thanks for the tip Shawn.
Here is my code, added some XML writing to see results.

Code:
  
WriteRegisteredDlls("D:\Temp\@WKSTA.xml")


Function WriteRegisteredDlls($XMLFile)
$ArchivoXML=$XMLFile
$xml = LoadXml($ArchivoXML)
$RootKey = "HKEY_CLASSES_ROOT\CLSID\"
$Index = 0
:Loopo
$KeyName = EnumKey("HKEY_CLASSES_ROOT\CLSID\", $Index)
If @ERROR = 0
If KeyExist($RootKey + $KeyName + "InprocServer32")=0
$Inproc=$RootKey + $KeyName + "\InprocServer32"
$DllName = ReadValue($Inproc, "")
If Exist ( $DllName )
$FileLocation=$DllName
$CompanyName=GetFileVersion($DllName,"CompanyName")
$BinFileVersion=GetFileVersion($DllName,"BinFileVersion")
$FileDescription=GetFileVersion($DllName,"FileDescription")
$FileVersion=GetFileVersion($DllName,"FileVersion")
$Languaje=GetFileVersion($DllName,"Language")
$Name=GetFileVersion($DllName,"OriginalFilename")
$ProductName=GetFileVersion($DllName,"ProductName")
?$DllName
If $CompanyName="Microsoft Corporation"
$Path="Microsoft/Dlls/$Name/CompanyName"
$= WriteXmlValue($xml, $Path, $CompanyName)
$Path="Microsoft/Dlls/$Name/BinFileVersion"
$= WriteXmlValue($xml, $Path, $BinFileVersion)
$Path="Microsoft/Dlls/$Name/FileDescription"
$= WriteXmlValue($xml, $Path, $FileDescription)
$Path="Microsoft/Dlls/$Name/FileVersion"
$= WriteXmlValue($xml, $Path, $FileVersion)
$Path="Microsoft/Dlls/$Name/Languaje"
$= WriteXmlValue($xml, $Path, $Languaje)
$Path="Microsoft/Dlls/$Name/ProductName"
$= WriteXmlValue($xml, $Path, $ProductName)
$Path="Microsoft/Dlls/$Name/Path"
$= WriteXmlValue($xml, $Path, $DllName)
EndIf

EndIf
EndIf
$Index = $Index + 1
GoTo Loopo
EndIf
SaveXml($xml, $ArchivoXML)
$xml = 0
EndFunction


;**********************************
; XML
;**********************************
Function FormatXML($objXMLDOM)
Dim $,$strXSL,$objXSL
$strXSL = " Chr(34) + "UTF-8" + Chr(34) + "?>" + @CRLF
$strXSL = $strXSL + " " xmlns:xsl=" + Chr(34) + "http://www.w3.org/1999/XSL/Transform" +
Chr(34) + ">" + @CRLF
$strXSL = $strXSL + " " version=" + Chr(34) + "1.0" + Chr(34) + " encoding=" + Chr(34) +
"UTF-8" + Chr(34) + " indent=" + Chr(34) + "yes" + Chr(34) + "/>" + @CRLF
$strXSL = $strXSL + " Chr(34) + ">" + @CRLF
$strXSL = $strXSL + ""+ @CRLF
$strXSL = $strXSL + ""+ @CRLF
$strXSL = $strXSL + "
"+ @CRLF
$strXSL = $strXSL + "
"+ @CRLF
$strXSL = $strXSL + "
"
$objXSL = CreateObject("Microsoft.XMLDOM")
$objXSL.async = false
$=$objXSL.loadXML($strXSL)
$objXMLDOM.TransformNodeToObject ($objXSL, $objXMLDOM)
$formatXML = $objXMLDOM
EndFunction

Function LoadXML($filename)
Dim $, $rootNode, $objNewPI, $strType
$loadXml = CreateObject("Microsoft.XMLDOM")
$loadXml.async = False
$loadXml.preserverwhitespace = True
If NOT $loadXml
Return
EndIf
$ = $loadXml.Load($filename)
EndFunction

Function SaveXML($xml, $filename)
$xml = FormatXML($xml)
$SaveXml = $xml.Save($filename)
EndFunction

Function WriteXMLValue($source, $path, $value)
Dim $, $p, $rootNode, $sectionNode, $parentNode, $childNode, $node, $xml
If VarType($source) = 9
$xml = $source
Else
If InStr($source,"<")=0
$xml = LoadXML($source)
Else
$xml = CreateObject("Microsoft.XMLDOM")
$xml.async = false
$=$xml.loadXML($source)
EndIf
EndIf
$sectionNode = $xml.SelectSingleNode($path);
If NOT $sectionNode
$parentNode = $xml
For Each $node In Split($path,"/")
$p = $p + $node
$sectionNode = $xml.SelectSingleNode($p)
If NOT $sectionNode
$sectionNode = $xml.CreateElement($node)
$parentNode = $parentNode.AppendChild($sectionNode)
Else
$parentNode = $sectionNode
EndIf
$p = $p + "/"
Next
EndIf
If $sectionNode
$sectionNode.Text = $value
EndIf
If VarType($source) = 9
$WriteXMLValue = $xml
Else
If InStr($source,"<")=0
SaveXML($xml, $source)
Else
$WriteXMLValue = $xml
EndIf
EndIf
EndFunction

_________________________
Life is fine.