# Print all registered type library names
# Warn about different classids using the same type library name.
use strict;
use Win32::Registry;
use vars qw($HKEY_CLASSES_ROOT);
my %Version;
my ($hTypelib,$hClsid);
$HKEY_CLASSES_ROOT->Create('TypeLib',$hTypelib)
or die "Cannot access HKEY_CLASSES_ROOT\\Typelib";
my $Clsids = [];
$hTypelib->GetKeys($Clsids);
foreach my $clsid (@$Clsids) {
$hTypelib->Create($clsid,$hClsid);
next unless $hClsid;
my $Versions = [];
$hClsid->GetKeys($Versions);
foreach my $version (@$Versions) {
my $value;
next unless $hClsid->QueryValue($version,$value);
printf "*** Typelib name \"$value\" multiply defined ***\n"
if defined $Version{$value};
$Version{$value} = join(', ', @$Versions);;
}
$hClsid->Close;
}
$hTypelib->Close;
foreach my $TypeLib (sort keys %Version) {
printf "%-60s %s\n", $TypeLib, $Version{$TypeLib};
}