• ベストアンサー

ShellExecuteを用いてプログラムを走らせる

ボタンを押すと,ShellExecuteで外部プログラム は起動できる状態なのですが,perlのインタプリタが 走りません. openとしているだけなので,(.pl)の 拡張子ファイルを開いているだけかも しれませんが.一応デフォルトで(.pl)ファイル をダブルクリックするとPerl Command Line Interpreterが起動するようになっています. 外部プログラムの実行でプログラムを走らせる ことは可能なのでしょうか.そしてその手段は どのようなものがあるのでしょうか.よろしく お願いいたします.

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

  • ベストアンサー
  • rigidbody
  • ベストアンサー率60% (20/33)
回答No.2

返値ret01のエラーコードは何でしたか? 例示して頂いたコードから推測出来る事は、 ・"z:\\perl_change\\jisyo01.pl"が無い ・引数SW_HIDEが、Perlインタプリタにとって正しく動く値ではない ・実は拡張子plが、Perlインタプリタに関連付けされていなかった といった感じです。 >ShellExecuteが最適だという情報は安心しました 「文書ファイルを関連付けされたソフトで起動」というのは、ShellExecute()とShellExecuteEx()でのみ出来ると思います。

Achilles1993
質問者

お礼

2回目の素早い返答ありがとうございます。 rigidbodyさんの回答を参考に改良を加えて いきたいと思います。 丁寧な回答ありがとうございました。

その他の回答 (1)

  • rigidbody
  • ベストアンサー率60% (20/33)
回答No.1

ShellExecute()に、どんな引数を渡しているか教えて頂けないでしょうか?でないと回答が難しいです。 >ダブルクリックするとPerl Command Line Interpreterが起動 では、"open"コマンドでperlインタプリタが起動するはずです。 >外部プログラムの実行でプログラムを走らせることは可能なのでしょうか 可能です。 >手段はどのようなものがあるのでしょうか. ShellExecute()の他、CreateProcess()等 沢山あります。単に起動するだけなら、ANSI-C標準関数のsystem()があります。単純かつ標準語であるのが長所です。( 中でCreateProcess()を使用 ) 今回の場合は、ShellExecute()が最適だと思います。

Achilles1993
質問者

お礼

ありがとうございます。 プログラムの起動ができるという情報と、ShellExecuteが最適だという情報は安心 しました。

Achilles1993
質問者

補足

void CModel05View::OnMyButton1() { // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください HINSTANCE ret01 = ShellExecute(m_hWnd, "open", "z:\\perl_change\\jisyo01.pl", NULL, NULL,SW_HIDE); } というものを渡しています。 jisyo01.plを実行することにより、ファイルが作成(更新)されるはずなのですが作成(更新)されていません。 私はインタプリタが起動していないと判断しています。

関連するQ&A

  • ShellExecute関数

    ShellExecuteを使い外部プログラムを実行したいんですがうまくいきません。 BINファイルをアプリケーションとして実行したいです。 ですが関連付けを行ったファイルでしかShellExecuteは起動できないようで、これらを解決する方法はありますか? 関連付けの方法はわかるのですが、関連付けをしないでもBINをアプリケーションとして実行したいのです。 最近Cを練習しはじめた初心者です、宜しくお願いします。

  • ShellExecuteでDOSコマンド実行したら...

    VC++6.0においてShellExecuteでDOS窓をたち上げてコマンドを 実行したいのですが、うまくいきません。 1.ShellExecute(m_hWnd,"open","command.com","dir",NULL,SW_SHOW); ...とすると”指定された COMMAND 検索ディレクトリが違います.”となり、 なにも実行されません。 2.ShellExecute(m_hWnd,"open","command.com","dir /?",NULL,SW_SHOW); ...とするとちゃんとdirのヘルプが表示されますが、すぐに窓が閉じます。 3.ShellExecute(m_hWnd,"open","command.com","dir /? > out.txt",NULL,SW_SHOW); ...としてもファイルが作られず、2.と全く同じ結果になってしまいます。 これはどうしてこのような現象が起きるのでしょうか? DOSプロンプトをたち上げて同様なコマンドを実行した場合はちゃんと期待通りの結果が得られます。 あと、DOS窓が閉じないようにするにはどうすればいいのでしょうか?

  • ShellExecuteで外部アプリを起動したい

    こんにちは。 ShellExecuteを使って外部アプリを起動するために、 ShellExecute(NULL,NULL,"Program Files/XWaveClient/XWavePDA.exe",NULL,NULL,SW_SHOWNORMAL); というコードをかいているのですが、この行で  error C2065: 'ShellExecute' : undeclared identifier というコンパイルエラーがでてしまい、困っています。 ShellExecuteを使うためにはなにかヘッダファイルを includeしなくてはならないのでしょうか? 環境は、eVC++4.0です。 よろしくお願い致します。

  • 「Perl Command Line InterPreter」ってなんですか?

    自分のPC内でPerlファイルを実行する為に、 ActivePerl 5.8.8 Build 819 httpd.exe をインストールしています。 先週くらいまでは特に何ともなかったのですが、今日PC内を開いてみたら、 拡張子.plファイルのアイコンが「Perl Command Line InterPreter」に関連づけされていました。 関連付けはちょっとしたことでかわってしまうようなので、何かのキッカケでかわってしまったのかな、と思っておりますが。(自分では直接指定していません。) また上記のアプリケーションはPerlを書く為のテキストエディタと認識しましたが、あっていますか?(普段はメモ帳で開いて編集しております。) これは「ActivePerl」をインストールすると、一緒に入るものですか? ([スタート]-[プログラム]の中のActivePerlの中をみると、「Perl Package Manager」という名前の同じアイコンのものが存在しているようです。) もともと.plファイルのアイコンは黄色い●だったと記憶していますが、これは何が関連付けされてこのアイコンになっていたのでしょうか? 最初はアイコンが変わっていたのに驚き、ウイルスか!?とびっくりしてしまいました。 これはそういう心配はないものでしょうか?

    • ベストアンサー
    • Perl
  • ShellExecuteの使い方について

     既存のプログラム(他の人が作成したもの)を参考にプログラムを作成しましたが、どうしても、希望通りの挙動となりません。ShellExecuteの部分が要点と思いますので、その点について教えてください。言語は JavaScript です。  以下のような記述がありました。 ---- var launcher = new ActiveXObject("Shell.Application"); launcher.ShellExecute(cmd, param, "", "open", "1"); ----  ShellExecute の引き数の cmd は、実行ファイル名(ファイルパス付)、param は実行ファイルの引き数です。これはこれで動いています。  さて、これを参考に、cmd の部分にDOSコマンドを与えました。すると、DOSコマンドは実行されたものの、実行の瞬間に黒いウィンドウ(おそらく、コマンドプロンプトと思われます)が一瞬表示されました。この黒いウィンドウを表示させずにDOSコマンドを実行させたいのですが、引き数を調整することでそのようなことは可能でしょうか。  Webで調べたところ、ShellExecute の引き数として SW_SHOWNORMAL や SW_MAXIMIZE などを与える方法もあるようですが、SW_*** を紹介しているWebページでは、そもそも引き数の個数が上記と異なっていたりします。  ご助言をお願い致します。

  • perlプログラムが動かない

    パールのプログラムを作成して拡張子「.pl」で保存するとアイコンがパールのマークになりますよね。 プログラムファイルにデータファイルをドラッグすると、プログラムファイル(拡張子.pl)のアイコンが白黒反転して、目的の加工データをファイルとして出力するプログラムがるのですが、プログラムを作成したパソコンともう一台しか動作しません。他のパソコンでは、プログラムファイルにデータファイルをドラッグしても、プログラムファイル(拡張子.pl)のアイコンが白黒反転せず、パールプログラムが動作しません。 どこの設定をどのように変更すればいいのでしょうか。(プログラムファイルのアイコンを白黒反転させるにはどうしたらいいのでしょうか。) コマンドプロンプトでパスが通っているか確認をしたのですが、どのパソコンもパスは通っています。 プログラムの動作するパソコンの「システム環境変数のpathとPATHEXT」をプログラムの動作しないパソコンにコピーペーストしてもNGでした。 ※perl.exeが入っているディレクトリは同じにしています。プログラムファイとデータファイルをperlフォルダに入れても駄目でした。  OSは、Windows XPです。

  • perlプログラム内で中間ファイルを利用するには

    perlプログラムについて 処理1 の アウトプットデータを用いて、処理2を行うというのを1つのperlのプログラム内で実装したいと考えています。 処理1のアウトプットファイルの書き出しに時間がかかり 処理2が先に動き、ファイル読み込みできずに終わってしまいます。 処理1のアウトプットファイル書き出しが終了を待ってから、処理2を実施したいのですが、 どのように記載すればよいのでしょうか? 例) perl program.pl AAA > BBB program.pl 内 open(OUT1,"> program1_work"); open(ARG,$ARGV[0]); while(<ARG>){ 処理1 print OUT1 "XXXXXX"; } close(ARG); open(ARG1,OUT1); while(<ARG1>){ 処理2 print "XXXXXX"; } close(ARG1);

  • ShellExecuteでエクセルファイルが起動しません。

     今、API関数GetOpenFileNameで「ファイルを開く」コモンダイアログを出して、  そこから選んだファイルのフルパスをテキストボックスに入れています。  さらにそのテキストボックスの中に入ったフルパスをAPI関数ShellExecuteで起動  させようとしているのですが、起動してくれません。  ちゃんとフルパスは入っています。  試しに新しいフォームを作ってShellExecute単独で、直接フルパスを  指定してやってみたところ起動できました。  問題は、パスではなく他の引数でしょうか??  ちなみに第1引数   : me.hwnd      第2引数   : "open"      第3引数   : フルパス      第4・5引数 : vbNullString      第6引数   : SW_SHOW と指定しました。  第4と5の引数はvbNullCharや""と指定してみました。  よろしくお願いします。

  • 特定の拡張子のファイルを開く時の既定のプログラム

    こんにちは。 OSはVistaを使っています。 Perlスクリプトには、よく「pl」という拡張子が使われています。 この拡張子のファイルを開くときに、ファイルを右クリックし、 [プログラムから開く]→[既定のプログラムの選択]→[参照]で Perlスクリプト用のエディタであるPerlEditor.exeを選択したのですが、 「推奨されたプログラム」や「他のプログラム」の一覧に、 それが追加されず、PerlEditor.exeを既定のプログラムに指定することができません。 PerlEditor.exeはC:\Program Files\Perl Editorというフォルダにあります。 何か思い当たることがありましたら、アドバイスを頂きたいと思います。 では、よろしくお願いします。

  • cgiとplとpm

    掲示板ソースをダウンロードするとplやpmという拡張子のものがありました。中身はPerlでした。 拡張子の使い分けを教えてください。 適当に4つのルールを書いてみましたので、間違っていたり、追加するルールがありましたから教えてください。 1 ブラウザがそれ自身にアクセスし、ブラウザのアドレスバーに表示させるならcgiにするべき。 2 Perlのpackageの機能を使うなら、パッケージファイルはplかpmでなくてはならない。 3 Perlのrequireの機能を使うなら、その外部ファイルはplでなくてはいけない。 4 Perlのuseの機能を使うなら、その外部ファイルはpmでなくてはならない。

    • ベストアンサー
    • Perl

専門家に質問してみよう