みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

使用環境
Apache HTTP Server 2.2(win32) OS:Win7
Perl : ActivePerl-5.14.2.1402-MSWin32-x86-295342

msg.plソースコード
#!c:/perl/bin/perl.exe
use Win32;
Win32::MsgBox("Hello world!!", 1);
$ret = Win32::MsgBox("保存しますか?", 3 | MB_ICONEXCLAMATION, "確認");
exeit;

上記スクリプトは、確かにコマンドプロンプトからは実行できるのですが、これを以下のようにWEBからアクセスできないのでしょうか?

http://****.******.**/cgi-bin/msg.pl

同様に以下のスクリプトも、上記のようにしてアクセスしたいのですが....
use Win32::Sound;
Win32::Sound::Volume('100%');
Win32::Sound::Play("C:/Windows/Media/tada.wav");
Win32::Sound::Stop();

思うに、この二つのモジュールが、コマンドプロンプトからだけでしか実行できないのであれば、この利用価値はどこにあるのでしょうか?(私としてはCGI,SSIとして動かしたいのですが...)よろしくお願いします。

投稿日時 - 2012-05-15 10:02:17

QNo.7476579

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

こんにちは。

Win32のライブラリは、WEB上から使用することというよりは、
Windowsのアプリケーション(exe等)として利用することを考えられているものです。
※スクリプトとしても使えますし、コンパイルしてexeにすることもできます。

CGI/SSIの場合、WEBサーバーにアクセスがあるたびにスクリプトが実行され
スクリプトから出された標準出力をアクセスしたブラウザに返して、
ブラウザとして(HTML等)解釈させるという流れになるものです。

どのような用途をお考えでしょうか?

ブラウザで確認して(ブラウザ内に)確認画面を出したいのであれば、
Win32のライブラリを使うのは不適合です。

ブラウザでアクセスするとサーバーの画面上で確認画面を出したいという用途でしたら
サーバーサイド用のサーバープログラム(Sと呼ぶ)を別に書いて、
Sと通信するCGI等のスクリプト(Cと呼ぶ)を書く形がよいのではないかと思います。

いずれにせよ、どういうことがしたいのかを具体的に書いてもらえると
ご説明しやすいです。

投稿日時 - 2012-05-15 12:14:27

補足

大野様 早速の回答有難うございます(追伸が遅れて申し訳ありません)
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" -->としています。
よろしくお願いします。

投稿日時 - 2012-05-16 08:12:19

あなたにオススメの質問