Name
Froschpopo the one and only!
Aufgabe
Wir möchten unter Windows, in Perl/Tk einen Standardbrowser starten ohne dass die GUI einfriert.
Das Problem
- Durch den Aufruf von 'start $url' öffnet sich ein neues DOS-Fenster.
- Beim Aufruf von system() friert die GUI ein, da sie auf eine Rückgabe von system() wartet.
Die Lösung
Wir ermitteln mit Hilfe der Registry den Standardbrowser und starten den Systemcall in einem Hintergrundprozess.
use Proc::Background;
use Win32::TieRegistry;
$Registry->Delimiter("/");
our $reg_key = $Registry->
{
"HKEY_LOCAL_MACHINE/SOFTWARE/Classes/HTTP/shell/open/command"
};
GotoUrl('http://test.net');
sub GotoUrl
{
my $browser_path = $reg_key->{""};
my ($prog) = $browser_path =~ /^"/ ? $browser_path =~ m/"(.*?)"/ : split(/\s/,$browser_path);
my $proc1 = Proc::Background->new($prog, $_[0]);
}
Ergänzungen, Kommentare
PlTk - 10 Jan 2006 - allgemeine Lösung
WWWBrowser.pm stellt eine allgemeinere Methode, die auch auf anderen Betriebssystemen funktioniert, zur Verfügung.
Kommentare werden am besten in folgender Form vorgenommen, damit
sie im Inhaltsverzeichnis angezeigt werden (natürlich ohne das <verbatim>):
---### Main.??? - 14 Jul 2003 - Betreff