QUOTE (RogueSpear @ Apr 12 2006, 01:14 AM)

@MHz, something to watch out for there is that the entry is not always exactly "Adobe Reader". I've seen it with a version number afterwards. That's why I keyed on the beginning of the string.
The UDF I show relies on what you view in Add/Remove programs. If a program maker changes the name like changing pants, then real problems in identifing does come in. Yes, indeed entries can change as they sometimes add version number, so I will add in a StringLeft to handle the name without the rest. Thanks RogueSpear

Add code here for comparison.
CODE
$result = _InstalledVersion('Adobe Reader')
If Not @error Then MsgBox(0, 'Installed Version', $result)
Func _InstalledVersion($displayname)
Local $key_main = 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall'
Local $i, $key_main, $key_result, $key_sub, $version, $size = StringLen($displayname)
For $i = 1 To 1000
$key_sub = RegEnumKey($key_main, $i)
If @error Then ExitLoop
If StringLeft(RegRead($key_main & '\' & $key_sub, 'DisplayName'), $size) = $displayname Then
$version = RegRead($key_main & '\' & $key_sub, 'DisplayVersion')
If Not $version Or @error Then ContinueLoop
Return $version
EndIf
Next
SetError(1)
Return
EndFunc