Sean - Hey - that's pretty cool. I hadn't thought of taking that angle. I noticed a problem or two with your code. The main one was that if your association is pointing to something like "C:\Program Files\Windows NT\Accessories\WORDPAD.EXE", it doesn't like it because of the space in "Program Files". So I modified your code a little. I also put in some debugging stuff to make it easier to see what's going on. Below is the output on a bunch of different associations, all are coming out ok.
I am not sure I like your use of split on getting everything up to the first space, but I couldn't figure out how to get everything up to the first space using a regular expression. If you do something like ($cmd)=$command=~/^(.*)\s/; it gives you everything up to the last space, which is annoying, I am sure there is a way around it. Let me know your thoughts on it. Also- How is Win32::TieRegistry different from Win32::Registry? Tim .html="C:\PROGRA~1\Plus!\MICROS~1\iexplore.exe" .htm="C:\PROGRA~1\Plus!\MICROS~1\iexplore.exe" .txt="C:\Program Files\Windows NT\Accessories\WORDPAD.EXE" .pl=C:\Perl\bin\Perl.exe .doc="C:\Program Files\Microsoft Office\Office\winword.exe" .xls="C:\Program Files\Microsoft Office\Office\excel.exe" .ppt="C:\Program Files\Microsoft Office\Office\PowerPnt.exe" .log="C:\Program Files\Windows NT\Accessories\WORDPAD.EXE" .url=rundll32.exe .jpg=C:\PROGRA~1\PAINTS~1\psp.exe .gif=C:\PROGRA~1\PAINTS~1\psp.exe .avi="C:\Program Files\Windows Media Player\mplayer2.exe" .wav="C:\Program Files\Netscape\Communicator\Winamp\winamp.exe" Here's the code: use Win32::TieRegistry; check(".html"); check(".htm"); check(".txt"); check(".pl"); check(".doc"); check(".xls"); check(".ppt"); check(".log"); check(".url"); check(".jpg"); check(".gif"); check(".avi"); check(".wav"); sub check { ($item)[EMAIL PROTECTED]; $prog=getProgram($item); print "$item=$prog\n"; } sub getProgram { if (my $ext = $_[0]) { if (my $typeName = $Registry->{"HKEY_CLASSES_ROOT\\$ext\\\\"}) { if (my $command = $Registry->{"HKEY_CLASSES_ROOT\\$typeName\\shell\\open\\command\\\\"}) { my ($cmd); #print "\tcommand=$command\n"; if ($command=~/^".*"\s+.*$/) { ($cmd)=$command=~/^(".*")\s+.*$/; return $cmd; } else { split(/ /, $command); return $_[0]; } } else { return 0; } } else { return 0; } } else { return 0; } } ------------------------------------------------------------------------------------------------- Tim Thomas Unix Systems Administrator Lockheed Martin EIS ยท Denver Data Center 303-430-2281 mailto:[EMAIL PROTECTED] ------------------------------------------------------------------------------------------------- -----Original Message----- From: Sean Healy [mailto:[EMAIL PROTECTED] Sent: Saturday, January 13, 2001 9:13 AM To: perl-win32-gui-users@lists.sourceforge.net Subject: [perl-win32-gui-users] Getting the browser Due to a message earlier this week, I was thinking about the problem of getting a browser preference from the user's registry, so I wrote this: use Win32::TieRegistry; sub getProgram { if (my $ext = $_[0]) { if (my $typeName = $Registry->{"HKEY_CLASSES_ROOT\\$ext\\\\"}) { if (my $command = $Registry->{"HKEY_CLASSES_ROOT\\$typeName\\shell\\open\\command\\\\"}) { split(/ /, $command); return $_[0]; } else { return 0; } } else { return 0; } } else { return 0; } } You pass in the extension and this returns the path to the associated program. The extension must include the dot (i.e, pass in '.html', not 'html'). This works on my machine, and you're welcome to use it (or modify it to make it work on your system). It does some basic error checking (makes sure you pass in an extension, makes sure the extension exists in the registry, makes sure the file type has a command associated with it). I have not tested case sensitivity (I know Windows is not case-sensitive as far as file names go, but I don't know if the same applies to the registry). I'd be glad to hear any feedback. _________________________________________________________________ Get your FREE download of MSN Explorer at http://explorer.msn.com _______________________________________________ Perl-Win32-GUI-Users mailing list Perl-Win32-GUI-Users@lists.sourceforge.net http://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users