[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

Reply via email to