This is eventually the code I went with, which has
been tested with IE 5/6, Mozilla/Netscape, and Opera.

############################################################################## open_url() - open a url in the system's default browser ############################################################################## USAGE: # &open_url( "http://127.0.0.1:8888/"; ); # # OS SPECIFIC NOTES: # This routine loads the Win32::Shell module to execute the "open" # command which will open the browser and load the URL. However, if the # user has defined a local path to a browser, we try to open that instead. # # RETURNS: # 1; we instruct the user to open their browser if we can't. #############################################################################
sub open_url {

   my ($url) = @_;

   # we spit out our suggestion just to catch all instances.
   &note("If your browser doesn't load, go to <$url>", 1);

   # find out what browser we're using.
   use Win32::TieRegistry;
   my $browser = $Registry->{"Classes\\http\\shell\\open\\command"}->{'\\'};
   &note("Your registry states that $browser is your default program.");

   # if a browser_path hasn't been set, try
   # to open the default browser using the native API.
   # note, that if the $browser is Opera, we skip
   # this part, because Opera uses a Multiple
   # Document Interface that crashes us every time.
   # instead, we use the "path to browser" code below.
   if ( $SETTINGS->{user}->{browser_path} eq "default"
        or $browser =~ /opera/i ) {
      use Win32::API;
      my $ShellExecute = new Win32::API("shell32", "ShellExecuteA",
                         ['N','P', 'P', 'P', 'P', 'I'], 'N');
      $ShellExecute->Call(0, "open", $url, 0, 0, 1);
  }

   # if a browser_path has been defined, try passing
   # the $url to the .exe and hope it understands.
   else {

      # if we see "program files" or "internet explorer", we take
      # a chance and try to change them to their common eight char
      # equivalents. this won't work for all users but covers
      # a good large portion of them. yup yup. fun. chicks on speed.
      $SETTINGS->{user}->{browser_path} =~ s/program files/progra~1/ig;
      $SETTINGS->{user}->{browser_path} =~ s/internet explorer/intern~1/ig;

      &note("Trying to load $SETTINGS->{user}->{browser_path}.");
      unless ( fork ) { system("$SETTINGS->{user}->{browser_path} $url"); }
   }

   return 1;
}

1;

--
Morbus Iff ( .sig on other machine. )
http://www.disobey.com/ && http://www.gamegrene.com/
"where's there's a will, there's a morbus ready to collect!"


Reply via email to