• 締切済み

Perl Win32::MsgBoxについての質問

大野 悟(@ohnosatoru)の回答

回答No.1

こんにちは。 Win32のライブラリは、WEB上から使用することというよりは、 Windowsのアプリケーション(exe等)として利用することを考えられているものです。 ※スクリプトとしても使えますし、コンパイルしてexeにすることもできます。 CGI/SSIの場合、WEBサーバーにアクセスがあるたびにスクリプトが実行され スクリプトから出された標準出力をアクセスしたブラウザに返して、 ブラウザとして(HTML等)解釈させるという流れになるものです。 どのような用途をお考えでしょうか? ブラウザで確認して(ブラウザ内に)確認画面を出したいのであれば、 Win32のライブラリを使うのは不適合です。 ブラウザでアクセスするとサーバーの画面上で確認画面を出したいという用途でしたら サーバーサイド用のサーバープログラム(Sと呼ぶ)を別に書いて、 Sと通信するCGI等のスクリプト(Cと呼ぶ)を書く形がよいのではないかと思います。 いずれにせよ、どういうことがしたいのかを具体的に書いてもらえると ご説明しやすいです。

hicolsugi
質問者

補足

大野様 早速の回答有難うございます(追伸が遅れて申し訳ありません) Win32::MsgBox に関してやりたいことは、ご指摘されているところの、スクリプトから出された標準出力(メッセージボックス)をアクセスしたブラウザに返したい..ということです。 Win32::Sound に関してやりたいことは、WEBサーバー(自宅)にアクセスがあった時、サウンドを、WEBサーバー本体から鳴らしたい..ということです。これに関しては以下のスクリプトで目的は一応達成されているのですが、なぜ鳴るのか?理解に苦しんでいます。ちなみに、鳴っているサウンドは'****.wav'の方で、$music = "g' f f f"の方は消されているようです。#注1単独でも鳴りません。 use Win32::API; use Win32; use Audio::Beep; use Win32::MediaPlayer; $winmm = new Win32::MediaPlayer; $winmm->load('****.wav'); $winmm->play;    #注1 $beeper = Audio::Beep->new(player => 'Audio::Beep::Win32::API'); # $music = "g' f bes' c8 f d4 c8 f d4 bes c g f2"; $music = "g' f f f";   $beeper->play( $music );  exit; 上記のファイルのアクセスは "****.shtml"(SSI)ファイル内 <!--#exec cgi= "../cgi-bin/****.pl" -->としています。 よろしくお願いします。

関連するQ&A

  • win32::mediaplayerについて

    Perlモジュールwin32::mediaplayerを使って以下のスクリプトを作成しました。 (使用環境 Apache HTTP Server 2.2(win32), Perl : ActivePerl-5.14.2.-MSWin32-x86) use Win32; use Win32::MediaPlayer;  $winmm = new Win32::MediaPlayer; $winmm->load('****.wav'); $winmm->play; これで、コマンドラインからは実行できるのですが、これを以下のように     <!--#exec cgi= "../cgi-bin/****.pl" -->     SSIで実行できないのでしょうか? 試行錯誤の末、 モジュール Audio::Beep,と Win32::MediaPlayer,の組み合わせで以下のようにしたら <!--#exec cgi= "../cgi-bin/****.pl" --> で実行できました。  use Win32::API; use Win32; use Audio::Beep; use Win32::MediaPlayer; $winmm = new Win32::MediaPlayer; $winmm->load('****.wav'); $winmm->play; $beeper = Audio::Beep->new(player => 'Audio::Beep::Win32::API'); # $music = "g' f bes' c8 f d4 c8 f d4 bes c g f2"; $music = "g' f f f";   $beeper->play( $music ) 思うに$winmm->load('****.wav');で指定したwavファイルが $music = "g' f f f";の音声データを上書きしているのであろうと思うんですが、いまひとつ理解できません。これも合わせてお教え願えれば幸いです。 よろしくお願いします。

  • use strictが効かない (PERL)

    たびたびお世話になっております。 PERL version 5.14.2 をWindows 7 のコマンドプロンプトから起動して使っています。 use strict; と一行目に書くと 宣言されていない変数があれば拒絶されるとのことで #!/usr/bin/perl use strict; use warnings; $a = 10; print "$a\n"; というスクリプトを書きました。が、すんなり動いてしまいます。 use strict; は どうすればうまく効くのでしょうか。 ご指導お願いします。

    • ベストアンサー
    • Perl
  • Perlで作成したCGIについて

    Perlで作成したCGIについて Perlで作成したCGIについて質問させていただきます。 #################### ##(1)system.cgi ## #################### #!c:/Perl/bin/perl.exe use strict; use warnings; use CGI; use CGI::Carp('fatalsToBrowser'); use CGI qw(:standard); print "Content-type:text/html;charset=utf8\n\n"; system('C:\\test.txt'); ##################################################### C直下にあるtest.txtの中身は「abcd」など 簡単なものです。 ##################################################### ################### ##(2)win32.cgi ## ################### #!c:/Perl/bin/perl.exe use strict; use warnings; use CGI; use CGI::Carp('fatalsToBrowser'); use CGI qw(:standard); use Win32::API; print "Content-type:text/html;charset=utf8\n\n"; my $MessageBox = Win::API -> new("user32","MessageBoxA","NPPN","N"); $MessageBox -> Call(0,"HelloWorld","Message",0); ##################################################### ##################################################### 以下にスペックを書きます。 Microsoft Windows XP Professional version2002 Service Pack2 Genuine Intel(R)CPU L2300 @1.50GHz 1.50GHz,1.49GB RAM ・ActivePerl ver5.10.1 built for MSWin32-x86-multi-thread ・Apache Apache 2.2.14(Win32) ##################################################### 上記の(1)、(2)のプログラムをエクスプローラ上(ローカル)で実行させて(1)ではテキストファイルを、 (2)ではメッセージボックスを表示させたいです。 結果は時間がかかるだけでTimeOutの設定である5分で切れてしまい何も起こりません。 しかし、全く同じプログラムで拡張子を.plに変更してコマンドプロンプトで実行すると、 期待通り(1)はテキストファイルが開かれ、(2)ではメッセージボックスが出てきます。 (1)、(2)ともCGIではsystemおよびMessageBoxの部分をコメントアウトして print文などを書けば普通にエクスプローラに表示されます。 (かなりhtmlとしては不備があると思いますが・・・) どうすればCGIで(1)、(2)のプログラムが期待通りの動きをするのか どうぞご教授のほどよろしくお願いいたします。 何か足りない情報や意味の分かりづらい個所がありましたら、仰ってください。 ちなみにこのプログラムは公開するために作成しているのではありません。 下手な説明、長文すみません。

  • Win98+PWS4.0でPERLが動作しません

    Win98+PWS4.0でPERLを動作させたいのですがうまくいきません。 ディレクトリ「Inetpub」-「scripts」へTEST.PLという名で 下記のプログラムを入れて実施すると、 --------------- #!/user/local/bin/perl print "Content-type: text/html\n\n"; print "<html>\n"; print "<body>\n"; print "<p>\n"; print "Hello\n"; print "</p>\n"; print "</body>\n"; print "</html>\n"; --------------- HTTP エラー 403 403.1 許可されていません: 実行アクセスは許可されていません --------------- と出ます。 レジストリの設定は ".pl",".cgi”とも「C:\Perl\Bin\Perl.exe %s %s 」として、 PWSの設定で「scripts」は”実行””スクリプト”とも チェエク入をれています。 「wwwroot」のルートへ置いても同様のエラーが発生します。 DOS窓から「Inetpub」-「scripts」内でTEST.PLとすると 正常に表示はされます。 PerlへのパスもC:¥から実行確認済みです。 何が原因と考えられるでしょうか。 宜しくご教示お願いします。

  • ブラウザ上からなら実行可能なスクリプトがコマンドラインだと実行しません

    ブラウザ上からなら実行可能なスクリプトがコマンドラインだと実行しません windowXP, perl5 で開発しています。 簡単なプログラム(test.pl)なのですが ----- #!/usr/bin/perl use IO:Socket メール送信処理 1; ----- ブラウザ上から実行すると正しくメール送信されますが、 これをコマンドプロンプトから ----- perl test.pl ----- とすると、 Can't locate IO/Socket.pm と出てしまいます。 pathが通ってないとか絶対パスとかそのあたりかと思い、 socket.pmのあるパスを通したりしましたが、変化しません。 use IO::Socket を絶対パスとかで指定するのでしょうか? 解決方法をお教え頂ければと思います。 よろしくお願い致します。

    • ベストアンサー
    • Perl
  • perlの起動法

    perl起動法について質問なのですが、 perlでファイルを作り、一番上に#!/usr/bin/perlと書いて、perl.plという名前で保存しました。 ターミナルで$chmod 755 perl.pl $./perl.pl とコマンドをうったのですが、print文で書いたhello worldというが表示されません。 でもperl perl.plとコマンドを打つと実行されます。 一体この違いはなんなのでしょうか?学校の課題で、どうしても./perl.plとして実行させなければならないので是非解答お願いします。

    • ベストアンサー
    • Perl
  • ActivePerlで#!/usr/bin/が無効

    WindowsXPにActivePerl(5.16.3.1603)をインストールして、 コマンドラインに「perl script.scr」と入力して スクリプトファイルは実行できるのですが、 スクリプトファイルの1行目に「#!/usr/bin/perl」を記述して、 コマンドラインに「script.scr」と入力して実行しようとすると、 「C:\・・・\script.scrは有効なWin32アプリケーションではありません。」 というメッセージが表示されて正しく実行できません。 perl.exeのあるフォルダをC:\usr\binフォルダにして、 1行目を #!/usr/bin/perl #!C:/usr/bin/perl #!C:\usr\bin\perl などいろいろ試してみましたが、どれも 前述のメッセージが表示されて実行できませんでした。 コマンドラインに「script.scr」と入力するだけで 実行することができるようにするには どのようにすればいいのでしょうか。 script.scrの拡張子scrをplなどに変更して この拡張子のファイルに対してperl.exeに関連付けることにより script.plだけでも実行できるようにはなりますが 拡張子.scrではこの関連付けができませんので #!/usr/bin/perl等を使用する方法で解決したいです。 ジャンクションとかApacheなどが全く分かりませんので これらを使わずに簡単にできる方法がありましたら教えてください。 (なお使っても分かりやすい手順があれば可です) よろしくお願いします。

    • ベストアンサー
    • Perl
  • Cygwin上でperlスクリプトの実行

    Cygwin上で、例えば「hello.pl」というperlスクリプトを 実行するのに $ perl hello.pl や $ ./hello.pl では実行できるのに $ hello.pl だと bash: hello.pl: command not found と なってしまって実行できません。 $ hello.pl でコマンド化して実行したいのですが どのようにすればよいか教えてください。

  • PERLスクリプトのコマンドライン実行

    お世話になります。 Perlスクリプトをコマンドライン実行するとき、 perl スクリプト名.pl とすると思いますが、その際、コマンドライン引数を渡してスクリプト内で、その引数を見て処理したいと思うのですが、そういうことできますか?引数の渡し方、受け取り方を教えてください。

    • ベストアンサー
    • Perl
  • パールが実行されない!!

    パールを実行させようとしたのですが、以下のような結果がブラウザで返されてしまいます。 Method Not Allowed The requested method POST is not allowed for the URL /aaa/bbb/ccc/ddd.pl. そこで、元々のHTML内のPOSTをGETに変えてみたところ、今度はddd.plを上記から実行するか、保存するかのダイアログが出てきてしまいます。 <FORM method=POST onsubmit="return check()" action="../../cgi-bin/ddd.pl">               ↓ <FORM method=GET onsubmit="return check()" action="../../cgi-bin/ddd.pl"> サーバー側のパールの設定(パールが動作しない等)なのでしょうか?