• ベストアンサー

Perl/TkでURLを既定のブラウザで開く方法

Perl/TkでGUIプログラミングをしております。 プログラム中のButtonを押した時に自分のパソコンに設定している 既定のブラウザでWEBサイトを開くにはどうすればいいでしょうか? イメージは下記のような感じです。 use Tk; use Encode; $url = "http://okwave.jp/"; $main->Button(-text=>decode("cp932","URLを開く"),-font => ["MS ゴシック", 12], -command => \&open_url) ->grid(-row=>0,-column=>0); sub open_url{ # 既定のブラウザでURL($url)を開く処理 } よろしくお願いします。

  • Perl
  • 回答数4
  • ありがとう数7

質問者が選んだベストアンサー

  • ベストアンサー
  • SE-1
  • ベストアンサー率57% (26/45)
回答No.3

Win32::FileOpが標準モジュールか忘れましたが、それを使えばプロンプトも開きません。 use Win32::FileOp qw(ShellExecute); $url = "http://okwave.jp/"; ShellExecute($url);

xkuonx
質問者

お礼

標準モジュールでは無かったので ppm install Win32-FileOp にてインストール後、上記ソースで目的を達成できました。 ありがとうございます。

その他の回答 (3)

  • SE-1
  • ベストアンサー率57% (26/45)
回答No.4

コマンドプトンプト、一瞬開きますね・・・。すみません。

xkuonx
質問者

お礼

書き忘れていて申し訳ないのですが、私の環境では コマンドプロンプトが表示される事なくWEBページを開けました。 OS:Windows XP Pro SP3 Perl:Active Perl v5.8.6 build 811

回答No.2

#!/usr/bin/perl use warnings; use strict; # 方法 2 jscript か vbscriptを使う。 # ただし、jscript か vbscript のスクリプトファイルを # 別途用意する必要がある。 my $uri = shift || 'http://google.co.jp'; my $jscript = shift || 'foo.js'; my $cmd = 'cscript.exe'; my $option = '//nologo'; open( my $ph, '-|', $cmd, $option, $jscript, $uri ) or die "$cmd:$!"; close $ph or die "$cmd:$!"; foo.js の 中身 WScript.CreateObject("WScript.Shell").Run(WScript.Arguments.Item(0));

xkuonx
質問者

お礼

jscriptかvbscriptで出来るようなのを見つけていました。 perlでの使い方を教示頂きありがとうございます。 別途ファイルが必要という事だったので、 今回は見送らせて頂きます。 機会があれば使わせて頂きますね。

回答No.1

#!/usr/bin/perl use strict; use warnings; # Windows 限定 my $uri = shift || 'http://google.co.jp'; my $cmd = 'cmd.exe /c start ' . $uri; system $cmd;

xkuonx
質問者

お礼

ありがとうございます。 上記方法で目的を達成できました。 一瞬コマンドプロンプトが表示されますが… これを表示しないようにするのは少し手間かかるみたいですね。

関連するQ&A

  • perl/tk のScrollbarについて

    下のように縦にボタンを100個配置した場合、どのようにスクロールバーを設定するのですか?表現がまずいかもしれませんが、MainWindowの縦にスクロールバーを配置したいのですが、方法がわかりません。 -------------------------------------------------------- #!c:\perl\bin\perl.exe use Tk; $top = MainWindow->new(); #ボタン $button_1 = $top->Button( -text => "ボタン1",-command => \&filemake ) ->grid(); $button_2 = $top->Button( -text => "ボタン2",-command => \&filemake ) ->grid(); $button_3 = $top->Button( -text => "ボタン3",-command => \&filemake ) ->grid(); $button_4 = $top->Button( -text => "ボタン4",-command => \&filemake ) ->grid(); $button_5 = $top->Button( -text => "ボタン5",-command => \&filemake ) ->grid(); $button_6 = $top->Button( -text => "ボタン6",-command => \&filemake ) ->grid(); . . . $button_99 = $top->Button( -text => "ボタン99",-command => \&filemake ) ->grid(); $button_100 = $top->Button( -text => "ボタン100",-command => \&filemake ) ->grid(); MainLoop();

    • ベストアンサー
    • Perl
  • Perl/TkのWWW::MechanizeのGET失敗時の動作

    WindowsにてPerl/Tkを使用しております。 WWW::MechanizeのGETを使って(おそらく)404 not foundを受信した後の動作の制御の仕方がわかりません。 下記ソースを実行して貰うとわかると思うのですが、 GETが失敗したら即sub関数内をreturnしてしまいます。 #!/usr/bin/perl use Tk; use Encode; use WWW::Mechanize; my $mech = new WWW::Mechanize(autocheck => 1); my $main = MainWindow->new; $main->Button(-text=>decode("cp932",'取得'),-font => ["MS ゴシック", 12], -command => \&get_source) ->grid(-row=>0,-column=>0); my $list = $main->Listbox(-selectmode=>'single',-font => ["MS ゴシック", 12]); $list->grid(-row=>1,-column=>0,-sticky=>'ew'); MainLoop; sub get_source{ my $uri = "http://www.google.co.jp/abcd"; $mech->get($uri); print "get_source end\n"; } 上記の「print "get_source end\n";」は実行されません。 データ取得先サイトがメンテナンス中は404になるようで困っています。 イメージでは「$mech->get($uri) or die "get_source error";」みたいな感じにエラーの場合の時の処理を記述したいのです。 ご存知の方いましたらご教示願います。 使用環境 ・Windows XP Professional SP3 ・Active Perl v5.8.6 for MSWin32-x86-multi-thread build811 ・自作PC(CPU:Athlon 64 3800+)

    • ベストアンサー
    • Perl
  • perl/tk のScrollbarとジオメトリー

    Tk::Tilerを教えてもらってスクロールバーを配置できたのですが、ジオメトリーマネージャでpack,gridを使って、配置できる方法を知りたいのですが。 ----------------------------------------------- use Tk; use Tk::Tiler; $top = MainWindow->new(); $top0 = $top->Tiler()->pack(); $top->AddScrollbars($top0); $top->configure(\'-scrollbars\' => \'w\'); #ボタン $button_1 = $top0->Button( -text => \"1\")->grid(); $button_2 = $top0->Button( -text => \"2\")->grid(); .... $button_6 = $top0->Button( -text => \"6\")->grid(); $button_11 = $top0->Button( -text => \"11\" ); $button_12 = $top0->Button( -text => \"12\" ); $button_13 = $top0->Button( -text => \"13\" ); ...... $button_16 = $top0->Button( -text => \"16\" ); $button_11->grid($button_12,....,$button_16); $button_21 = $top0->Button( -text => \"21\" ); $button_22 = $top0->Button( -text => \"22\" ); ........ $button_26 = $top0->Button( -text => \"26\" ); $button_21->grid($button_22,......,$button_26); $top0->Manage($button_1,$button_2,$button_3,$button_4,$button_5,$button_6); $top0->Manage($button_11,$button_12,$button_13,$button_14,$button_15,$button_16); $top0->Manage($button_21,$button_22,$button_23,$button_24,$button_25,$button_26); $top0->update; $top0->focus; MainLoop();

    • ベストアンサー
    • Perl
  • Perl/Tkで、Entryが上手く扱えません

    GUIプログラミングを始めようと思い、Perlを少しかじっていることもあり、Perl/Tkを選びました。CentOS5にソース(Tk-804.027.tar.gz)からインストールを行い、オライリーの「入門Perl/Tk」に沿って勉強しています。 順調に各ウィジェットを使えていますが、Entryに関しては上手くいっていません。 以下のようなプログラムで問題が起こります。 01 #!/usr/bin/perl -w 02 03 use Tk; 04 05 $buffer = ""; 06 07 $top = MainWindow->new(); 08 09 $top->Entry( -textvariable => \$buffer )->pack(); 10 $top->Button(-text => "EXIT", -command => sub { exit })->pack(); 11 MainLoop; 状況としては、9行目で作成されるエントリが文字入力を受け付けてくれないのです。 しかし、10行目のボタンを作成するプログラムを削除すると入力を受け付けてくれます。 widgetコマンドで見られるサンプルも一部は入力できますが、すべてのエントリに入力できるものはありませんでした。 どなたか原因のわかる方、よろしくお願いします。

  • perl/tkで日本語を表記したいのですがうまくいきません。

    perl/tkについての質問です。 ラベルウィジェットに日本語を表記したいのですが、ご存知の方教えて下さい。 -text=>"ファイル名" のファイル名が文字化けしてしまいます。 ------------------------------------------- #!c:\perl\bin\perl.exe use Tk; $top = MainWindow->new(); $top->title("test"); $font=['MS ゴシック', 11, 'normal']; #ファイル名 $lb_f=$top->Label(-font=>$font, -text=>"ファイル名")->grid(); MainLoop(); -----------------------------------------------------------

  • Perl/Tk Entry に対して見出しを付けたい

    Win-XP,Active-Perl(v5.8.6)利用です。 複数のインプットボックスを持つ、 ┌────────────┐ │   ┌───────┐│ │品名:│       ││ │   └───────┘│ │   ┌───────┐│ │科目:│       ││ │   └───────┘│ │   ┌───────┐│ │価格:│       ││ │   └───────┘│ │ ┌──┐┌─────┐│ │ │OK││キャンセル││ │ └──┘└─────┘│ └────────────┘ こんな感じのウィンドウを作りたいのですが、 (図が崩れているかも知れませんが大体のイメージで・・・) ======================================== use Tk; $top = new MainWindow; $arg[0] = $top->Entry(-title=>'品名:')->pack; $arg[1] = $top->Entry(-title=>'科目:')->pack; $arg[2] = $top->Entry(-title=>'価格:')->pack; $b[0] = $top->Button(-text=>'OK',-command=> [\&exec,\@arg])->pack; $b[1] = $top->Button(-text=>'キャンセル',-command=> [\&exec,(-1)])-pack; ======================================== unknown option "-title" at C:\Perl\site\lib/Tk/Widget.pm Entryに対するオプションが分かりませんでした。 もしくは、Label や Message を組み合わせて実現するものでしょうか。 あと、実際に図のような配置でフォームを作りたい場合、 Buttonの部分の書き方はどのようにすれば良いですか? 以上、ご存知の方、ご教示よろしくお願い致します。

    • ベストアンサー
    • Perl
  • Perl 文字コードについて

    From: $from To: $mailto CC: $mailcc Subject: $subject Mime-Version: 1.0 Content-type: text/plain;charset=\"UTF-8\" Content-Transfer-Encoding: 8bit この時点で、UTF-8を指定しました。 use Encode; use Encode::Guess; Encode::Guess->set_suspects( qw/ euc-jp shiftjis 7bit-jis / ); $name = encode('UTF-8', decode('Guess', $name)); で本文を、UTF-8に変換して送るようなコードを書きました。 これで一応、パソコン、スマホ共に「本文」は文字化けせず送れるのですが、 今度、別の問題が発生してしまったようで、 「件名」が文字化けしてしまうようになりました。 $subject = encode('UTF-8', decode('cp932', $subject)); 件名も、本文と同じように変換コードをしてみたところ、パソコンでは文字化けしませんでしたが「件名」で文字化けしてしまいます。 調べたところ本文と件名では、内容が違い MIMEエンコードを使用するとのことだったのですが、 実際どのように使うのかわからないです。 $subject = encode('ISO-2022-JP', decode('cp932', $subject)); encode('MIME-Header-ISO_2022_JP', $subject) このように記述するとスマホでは文字化けしないのですが パソコンで文字化けしてしまいます。 そこで、件名がパソコンとスマホで文字化けしないようにし、本文はUTF-8で送るようにするにはどのようにすればいいのでしょうか?

    • ベストアンサー
    • Perl
  • Pythonコードの間違いを指摘して

    import tkinter as tk i=0 def a(): global i i=1 root=tk.TK() root.geometry("100x100") a() label=tk.Label(root,text=i) label.grid() tk.mainloop() →できた import tkinter as tk i=0 def a(): global i i=1 root=tk.TK() root.geometry("100x100") label=tk.Label(root,text=i) label.grid() button=tk.Button(root,text="button",command=a) button.grid() tk.mainloop() →できない(0と表示される)

  • Pythonコードの間違いを指摘して

    import tkinter as tk lastplay="" def gamestart(): global lastplay lastplay="試合開始" frame_main.tkraise() root=tk.Tk() frame_settings=tk.Frame(root) frame_settings.grid() button_gamestart=tk.Button(frame_settings,command=gamestart) button_gamestart.grid() fraim_main=tk.Frame(root) fraim_main.grid() label_1=tk.Label(frame_main,text=f"{lastplay}です") label_1.grid() fraim_settings.tkraise() root.mainloop() エラー内容 frame_mainが表示されたとき、変数の「試合開始」が表示されず、「です」のみ表示される。

  • Perlの文字コード変換についての質問です。

    Perlの文字コード変換についての質問です。 ホームページ全体は、UTF-8で作成されています。 そのため、$qsは、どうも、S-JISのようなので、UTF-8に変換して URLデコードさせたいのですがうまくいきません。 文字化けしないで、UTF-8で作成されたページに表示させたいのですがどうすればよいでしょうか? 宜しくお願い致します。 ------------------------------------ $qs = $ENV{'QUERY_STRING'}; use Encode::Guess qw/ shiftjis /; use Encode qw/ decode /; $enc = guess_encoding ( $qs ); if ( ref $enc ) { $utf8 = decode ( $enc->name , $qs ); } $qs =~ tr/+/ /; $qs =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; print "$qs";

    • ベストアンサー
    • Perl

専門家に質問してみよう