Hi,
Someone at work asked how they can find which device is connected to which
COM port in windows. I came up with the following solution (based on his
original attempt). I know that this can be optimized. It can also,
possibly, be generalized and put on CPAN as a module. This is where you
guys come in. Please let me know what you think.
use strict;
use warnings;
use Win32::TieRegistry;
my $RegistryAccess = {Access=>"KEY_READ", Delimiter=>"/"};
my $Enum = Win32::TieRegistry->new(
"HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Enum", $RegistryAccess);
search_ports_recursive($Enum);
sub search_ports_recursive
{
my $registry = shift;
my $friendly_name;
my @subkey_names = grep !/^Properties$/, $registry->SubKeyNames();
foreach my $name (@subkey_names)
{
my $subkey = $registry->Open($name, $RegistryAccess);
my $class = $subkey->GetValue("Class");
if ($class and "Ports" eq $class)
{
$friendly_name = $subkey->GetValue("FriendlyName");
my $control = $subkey->Open("Device Parameters", $RegistryAccess
);
my $port = $control->GetValue("PortName");
print "$port: $friendly_name\n";
}
else
{
search_ports_recursive($subkey);
}
}
}
Output (on my machine) in the format of <port number>: <device friendly
name>. :
LPT1: ECP Printer Port (LPT1)
COM1: Communications Port (COM1)
COM3: Intel(R) Active Management Technology - SOL (COM3)
COM5: HP un2430 Mobile Broadband Module Diagnostics (COM5)
COM7: HP un2430 Mobile Broadband Module NMEA (COM7)
בברכה | Best Regards,
דוב לוונגליק | Dov Levenglick
_______________________________________________
Perl mailing list
[email protected]
http://mail.perl.org.il/mailman/listinfo/perl