Active Perlはインストール済みのPCとします。
入力ボックスは、ユーザにファイル名などを入力してもらうために使います。
Web上のCGIなら、Perlで入力ボックスを出すのは簡単ですが、Windows PC上で出すにはどうしたらいいでしょう?
【補足】
Win32::OLEというモジュールを組み込めば、ダイアログボックスを出せそうですが、モジュールの組み込み方がわかりません。
IEを起動して、IEからPerlスクリプトを呼び出すという方法でもOKです。
ただし、実行するパソコンは、すべてWindowsですが、海外で現地人が使用しているものもあり、OS、IEのバージョンがバラバラです。
Windows 2000/XP/Vistaで同じスクリプトを使用できるようにしたいです。
また今後、WindowsやIEのバージョンが上がっても、メンテナンスを最小限(できれば不用)にしたいと思っています。
アドバイスお願い致します。
M.Hiroi's Home Page / Perl/Tk memo
Active Perl なら Perl-Tk ってのも一つの手段かと。
一応標準対応なので。
use strict; use Tk; my $buffer; my $top = MainWindow->new(); my $text = $top->Entry( -textvariable => \$buffer ); $text->pack(); my $button = $top->Button( -text => 'EXIT', -command => sub { exit(); } ); $button->pack(); MainLoop();
あとは一応 ActivePerl が入っていれば、IE で JavaScript 等と同様に PerlScript が実行できるので、内容によってはこっちの方が楽かもしれません。
ActivePerl で PerlScript と Google Maps: blog.bulknews.net
自分はやったこと無いので、使い勝手はわかりませんが。
M.Hiroi's Home Page / Perl/Tk memo
Active Perl なら Perl-Tk ってのも一つの手段かと。
一応標準対応なので。
use strict; use Tk; my $buffer; my $top = MainWindow->new(); my $text = $top->Entry( -textvariable => \$buffer ); $text->pack(); my $button = $top->Button( -text => 'EXIT', -command => sub { exit(); } ); $button->pack(); MainLoop();
あとは一応 ActivePerl が入っていれば、IE で JavaScript 等と同様に PerlScript が実行できるので、内容によってはこっちの方が楽かもしれません。
ActivePerl で PerlScript と Google Maps: blog.bulknews.net
自分はやったこと無いので、使い勝手はわかりませんが。
いきなり有効そうな回答をありがとうございます。
喜んでやってみたのですが、Tkのインストールがうまく行きませんでした。
書いてある通りにPPMを使ってみたのですが、、、、
C:\Work>ppm
PPM interactive shell (1.1.1) - type 'help' for available commands.
PPM> install Tk
Install package 'Tk?' (y/N): y
Retrieving package 'Tk'...
Error installing package 'Tk': Could not locate a PPD file for package Tk
PPM>
となってエラー。
CPANから直接ダウンロードしてインストールできないかとやってみたのですが、インストールのやり方がわかりませんでした。
「ActivePerl で PerlScript と Google Maps: blog.bulknews.net」の方は、読んでも理解できませんでした。(T_T;
レベルの低い質問者ですいません。
【追記】
職場のパソコンでやってみると、Tkなんて知らないと言われて動かなかったのですが、
自宅のパソコンでやるとちゃんと動きました!
職場のパソコンに入っているActive Perlのバージョンが古いとか、インストールに
ミスっていたとか、そういう問題のような気がします。
明日ActivePerlをインストールし直して、再チャレンジしてみます。
【再追記】
他業務などのために遅くなってしまいましたが、本日再チャレンジしてうまくいきました。
職場のパソコンはやはりActivePerlのバージョンが古すぎたようです。
(かつPerl本体ではなく、J-Perlを起動していました)
本日、ActivePerl 5.8.8.822をインストールし直してみたところ、Tkがちゃんと動きました。
ありがとうございました!
ちなみに1度しか試していないので、確証はないのですが、最新のActivePerl 5.10.0.1002を入れたときは、やはりTkが動きませんでした。標準から外されたのかな?
>喜んでやってみたのですが、Tkのインストールがうまく行きませんでした。
Proxy の設定が必要だったりしませんか?
参考: http://homepage3.nifty.com/hippo2000/perltips/ppm.htm#1.3
>CPANから直接ダウンロードしてインストールできないかとやってみたのですが、
>インストールのやり方がわかりませんでした。
ActivePerl なら CPAN ではなく、ActiveState から入手した方が良いです。
下記の手順でダウンロードしたパッケージをインストールで来ます。
http://homepage3.nifty.com/hippo2000/perltips/ppm.htm#2.3
※現在のダウンロード先は http://ppm.activestate.com/PPMPackages/zips/
ありがとうございます。
Proxyの設定かもしれません。チェックしてみます。
インストールの方法もよくわかりました。
ありがとうございます!
TKも良いとは思いますが、単にファイル名を入力させたいだけならば
print "ファイル名を入力して下さい:"; $fn = <STDIN>; print "あなたが入力したファイル名:$fn\n";
のように、標準入力で受け取とる方法はどうでしょうか?
もしくは、どうしてもGUIを使わせる必要が有るのであれば、
VBSを使ってInputBoxを使う方法が有ります。
VBS側
Dim strX ,sh,perl_script_path ' ' Perlのファイル名を指定してください。 ' perl_script_path = "a.pl" ''以下ロジック strX = "" While strX = "": strX = inputbox("ファイル名を入力して下さい") :Wend Set sh = CreateObject("Wscript.Shell") Call sh.Run("Command.com /C perl " & perl_script_path & " " & strX & " > ~~TMP~~", 0, True) Call WScript.Echo( CreateObject("Scripting.FileSystemObject").OpenTextFile("~~TMP~~").ReadALL )
Perl側
$fn = shift @ARGV; print "あなたが入力したファイル名:$fn\n";
使い方は、VBS側をキックするだけです。
回答ありがとうございます。
・ファイル名の他にも入力してもらう項目がいくつかある。
・コマンドプロンプトで動くプログラムに慣れてないユーザが多い。
という理由で標準入力は、外していました。
VBからPerlを呼び出すという方法は考えていたのですが、
VBSというのは知りませんでした。
ありがとうございます。検討してみます。
VBからPerlを呼び出すパターンを取らなかったのは、
VBだとパソコンごとのWindows環境によって、
動作に違いが出てきそうな気がしたことです。
同じプログラムを配布して、Windows XPや2000と、Vistaで同じ結果が
得られるものなのでしょうか?
ユーザのPC環境がバラバラなので、この辺がすごく気になります。
動作がPCの環境に左右されると言うのは、もしかしてTKも同じでしょうか?
TKもWindows標準のAPIを呼び出しているのであれば、そういうことも
あるかもしれませんね。
もし、この辺りの情報を教えて頂ける方がいらっしゃれば、
すごくうれしいのですが。。。
おそらく、ここが答えの一つになるんじゃないかと思います。
http://www.microsoft.com/japan/technet/scriptcenter/scrptfaq.msp...
怖い事が書いてありますが、経験上XPや2000では、
この程度の処理ならVBSに違いを感じたことは有りません。
(Vistaは手元に無いので分かりません)
なお、バージョンは以下で確認できます。
Call WScript.Echo( WScript.Version )
また、さらに根拠無しで申し訳無いのですが、
この程度の事であればVB6でも問題無いんじゃないかと思われます。
とにもかくにも.NET環境は、.NET Frameworkが違いを
吸収してくれることになっているので、
それが一番確実だと思います(手軽じゃなくなっちゃいますが)
ありがとうございます。
たいへん参考になりました。
さらに恥ずかしながら、
.NET Frameworkがどういうものなのか今まで分かっておらず、
「.NET環境は、.NET Frameworkが違いを吸収してくれることになっている」
と言う言葉が非常に参考になりました。
いきなり有効そうな回答をありがとうございます。
喜んでやってみたのですが、Tkのインストールがうまく行きませんでした。
書いてある通りにPPMを使ってみたのですが、、、、
C:\Work>ppm
PPM interactive shell (1.1.1) - type 'help' for available commands.
PPM> install Tk
Install package 'Tk?' (y/N): y
Retrieving package 'Tk'...
Error installing package 'Tk': Could not locate a PPD file for package Tk
PPM>
となってエラー。
CPANから直接ダウンロードしてインストールできないかとやってみたのですが、インストールのやり方がわかりませんでした。
「ActivePerl で PerlScript と Google Maps: blog.bulknews.net」の方は、読んでも理解できませんでした。(T_T;
レベルの低い質問者ですいません。
【追記】
職場のパソコンでやってみると、Tkなんて知らないと言われて動かなかったのですが、
自宅のパソコンでやるとちゃんと動きました!
職場のパソコンに入っているActive Perlのバージョンが古いとか、インストールに
ミスっていたとか、そういう問題のような気がします。
明日ActivePerlをインストールし直して、再チャレンジしてみます。
【再追記】
他業務などのために遅くなってしまいましたが、本日再チャレンジしてうまくいきました。
職場のパソコンはやはりActivePerlのバージョンが古すぎたようです。
(かつPerl本体ではなく、J-Perlを起動していました)
本日、ActivePerl 5.8.8.822をインストールし直してみたところ、Tkがちゃんと動きました。
ありがとうございました!
ちなみに1度しか試していないので、確証はないのですが、最新のActivePerl 5.10.0.1002を入れたときは、やはりTkが動きませんでした。標準から外されたのかな?