[EMAIL PROTECTED] schreef:
> I chose to enumerate all of the sub-keys under
> "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" and
> peform a GetStringValue for the "DisplayName" value.
> [...]
> use Win32::OLE('in');
> use Win32::OLE::Variant;
> use constant HKEY_LOCAL_MACHINE => 0x80000002;
>
> $WMIreg =
>
Win32::OLE->GetObject("winmgmts:\\\\$Computer\\root\\default:StdRegProv"
);
> $KeyPath =
> "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\";
> $Subkeys = Variant(VT_ARRAY | VT_VARIANT | VT_BYREF, [1,1]);
> $WMIreg->EnumKey(HKEY_LOCAL_MACHINE, $KeyPath, $Subkeys); @Keys;
> foreach $Key(in($Subkeys->Value))
> {
> push(@Keys, $Key);
> }
>
> foreach $Key(@Keys)
> {
> #$NewKeyPath =
> "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\$Key";
> $NewKeyPath =
> "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Winzip";
> $ValueName = "DisplayName";
> $DisplayName = Variant(VT_BSTR | VT_BYREF, "");
> print "$NewKeyPath\n";
> $WMIreg->GetStringValue(HKEY_LOCAL_MACHINE, $NewKeyPath,
> $ValueName, $DisplayName);
> print "$DisplayName\n";
> }
Your code didn't run as is. Always provide a running example.
use strict;
use warnings;
use Win32::OLE('in');
use Win32::OLE::Variant;
use constant HKEY_LOCAL_MACHINE => 0x80000002;
my $Computer = 'localhost';
my $WMIreg =
Win32::OLE->GetObject("winmgmts://$Computer/root/default:StdRegProv") or
die $!;
my $KeyPath =
'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\';
my $Subkeys = Variant(VT_ARRAY | VT_VARIANT | VT_BYREF, [1,1]);
$WMIreg->EnumKey(HKEY_LOCAL_MACHINE, $KeyPath, $Subkeys);
for my $Key(in $Subkeys->Value) {
my $NewKeyPath = $KeyPath . $Key;
my $ValueName = 'DisplayName';
my $DisplayName = Variant(VT_BSTR | VT_BYREF, '');
$WMIreg->GetStringValue(HKEY_LOCAL_MACHINE, $NewKeyPath, $ValueName,
$DisplayName);
print "$Key:\t$DisplayName\n";
}
You'll see that some keys just don't have a DisplayName value.
--
Affijn, Ruud
"Gewoon is een tijger."
_______________________________________________
ActivePerl mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs