• ベストアンサー

他のプログラムの呼び方について

GUIのプログラムと(Gui.exe)、計算をするプログラム(Calc.exe)がありまして、 GUIのプログラムからパラメータを入力し、そのパラメータにしたがって計算をするんですが、Gui.exeからCalc.exeを呼ぶにはどのようにすればいいんでしょうか? 2つのプログラムを同じディレクトリにおいて、system("Calc.exe hoge1 hoge2")のようにすればいいのかな、思ったのですが、どうもだめなようです。Calc.exeのパスを指定すればいいようなのですが、どのように指定すればいいかわかりません。 また、今は2つのexeファイルがあるのですが、これを一つのexeファイルにまとめるようなことって出来るのでしょうか? 開発環境はVC++6.0,Windows XPです。

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

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★アドバイス >Gui.exeからCalc.exeを呼ぶにはどのようにすればいいんでしょうか?  ↑  system() 関数でもシェル API 関数の ShellExecute() でも出来ます。  ShellExecute() 関数の場合は  ShellExecute( hWnd, TEXT("open"), TEXT("Calc.exe"), TEXT("hoge1 hoge2"), NULL, SW_SHOWNORMAL );  で起動できます。 >2つのプログラムを同じディレクトリにおいて、system("Calc.exe hoge1 hoge2")のようにすればいいのかな、 >思ったのですが、どうもだめなようです。  ↑  カレントディレクトリを設定してみたらどうでしょうか。  chdir()、SetCurrentDirectory() 関数で設定できます。  http://nienie.com/~masapico/api_SetCurrentDirectory.html→『SetCurrentDirectory』 >また、今は2つのexeファイルがあるのですが、 >これを一つのexeファイルにまとめるようなことって出来るのでしょうか?  ↑  両方のソースを持っていれば1つに出来ると思いますが…。  Gui.exe、Calc.exe は自作したものですか?  自作のものなら Gui.exe が GUI のプログラムだと思いますので Calc.exe の処理を関数などに  作り変えてその関数を GUI プログラムから呼び出せばよいだけです。 ・そもそも Calc.exe はどんな計算を行うのでしょうね。不明です。  引数を元に計算するだけなら関数にコマンドラインと同じ引数を受け取れるような仕組みに  作り変えるだけです。 ・Gui.exe でカレントディレクトリを Calc.exe のあるフォルダにパス設定すれば動くと思います。 ・以上。

参考URL:
http://nienie.com/~masapico/api_SetCurrentDirectory.html
ejbvi2
質問者

お礼

結局、GetModuleNameで実行ファイルのパスを特定して、同じパスのCalc.exeを実行すればうまくいきました。 今回は、Calc.exeのソースをいじれなかったので、2つのexeファイルのままにしました。 ありがとうございました。

その他の回答 (2)

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.3

Windowsなら他のプロセスを起動する場合、 CreateProcessを使うことが多いです。 #参考URL参照。 >これを一つのexeファイルにまとめるようなことって出来るのでしょうか? 1つに纏めるだけならできるでしょうが、実行可能な状態で1つに するのならソースファイルの処理をきちんと直してもう一度コンパイル すれば1つになるでしょう。

参考URL:
http://www.sm.rim.or.jp/~shishido/cprocess.html
  • uyama33
  • ベストアンサー率30% (137/450)
回答No.2

ret = _spawnl(_P_WAIT, ecp1, ecp1, eck1, ecpath0, ecpath1,NULL); とします。  昔のC言語の関数です。 VC++6.0から呼び出せます。 _spawnl について調べてください

関連するQ&A

  • C#でカレントディレクトリの取得方法について

     自作の.exeファイルの置かれているディレクトリ場所を  取得するプログラムを作成したく思います・  自作exeファイルのディレクトリ構造は、「*:*/hoge/plugin/自作.exe」です。  この時、一個上のディレクトリを参照して、ディレクトリパスを取得する  方法などがありましたらおしえて頂きたく思います。  ちなみに、以下のプログラムではできなかったのですが、参考までに載せました。  よろしくお願いします。  string stParentName = System.IO.Path.GetDirectoryName(@"*:*/hoge/plugin/自作.exe"); MessageBox.Show(stParentName);

  • CreateFile が ERROR_PATH_NOT_FOUND のエラーになる

    VC++を使っています。OSは Windows2000 です。 CreateFile で指定するファイル名をフルパスで指定し、EXEを同じ ディレクトリに置いて実行したところエラーとなり、詳細コードが ERROR_PATH_NOT_FOUND でした。 プログラムは以下のようになっています。 #define AAA "c:winnt\\system32\\AAA.log" hOpen = CreateFile( AAA, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 上記プログラムの AAA.exe を system32下に置いて実行すると、 パスが不正だと怒られてしまいます。。。 AAA.exe を別ディレクトリで実行すると、sysytem32下にちゃんと ファイルが作成されます。 AAA.exe を CreateProcess する BBB.exe を造って試しましたが、 やはり BBB.exe が system32下にあると駄目でした。 どうやらカレントディレクトリが同じだと駄目みたいです。 「"AAA.log"」とせずにフルパスとしているのは以下の理由のためです。 ・ファイルは必ず system32下に作成したい。 ・AAA.exe は必ず system32下にある。 しかし、BBB.exe が必ず system32下にあるとは限らないため、 「"AAA.log"」とした場合、BBB.exe を実行したディレクトリに 作成されてしまう。 CreateFile には今回のような制限があるのでしょうか??? #ヘルプを見る限り、書いてないです。。。

  • perlから他のプログラムを動かす方法

    Windows XP環境で作業をしています。 コマンドプロンプトで、次のように動かすプログラムがあったとき、 今のディレクトリ>command file1 file2 file3 これをperlから呼び出したい(perlで実行させたい)のですが、どのように書けばいいのでしょうか。 調べるとパスという言葉がよく出てくるのですが、パスという言葉の意味もよくわかっていません; わかる方がいらっしゃいましたら、是非教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • VS2003で「プログラムから開く」のプログラム名称

    いつもお世話になっております。 現在、VS2003にてVisual Basicでプログラムを開発しております。 開発したexeは、起動時のパラメータ(画像ファイルパス)により動きを分岐しております。 プログラム自体は正常に動いているのですが、プログラム名称が反映されていません。 具体的には、 ・開発したプログラムはSetupにてインストールします。 ・エクスプローラで画像ファイルを選択して右クリックします。 ・「プログラムから開く」-「プログラムの選択」 ・参照ボタンでインストールしたプログラムのexeを選択 ですが、一覧にアイコンは表示されるのですが、プログラム名称が空白です。 この名称のデータはどこで指定するのでしょうか? VS2005では、何も苦労する事なく表示されたような気がしますが、VS2003だと表示されません。 ご教授のほど、よろしくお願いいたします。 XP Pro SP2/VS2003/VB/.NET Freamwork 1.1

  • CGIからGUIプログラムを立ち上げたい(Windows)

    CGIからGUIプログラムを立ち上げたい(Windows) Windows XP SP2パソコン上で、自分のマシン上でファイルを閲覧したりプログラムを起動・制御するユーザインタフェースをブラウザにしようと、Apache/2.2.4(Win32)でローカルにhttpdを立ち上げています。 ブラウザ表示文書からCGIとして呼び出されたPerl(ActivePerl 5.005_03)プログラムが、system関数や``記法で外部のプログラムを実行することができますね。 ところが、起動した外部プログラムがウィンドウを開いてユーザと対話する種類のプログラム、つまりGUIプログラムの場合に限って、ウィンドウが開いてくれないので、したいことができません。 この原因と対策がお分かりになる方、教えてください。 (たとえば単純化のためにWindowsの電卓プログラムcalc.exeを起動してもウィンドウが出てくれません。 PowerShellスクリプト経由にしても元がブラウザだという情報が波及するらしくウィンドウが立ち上がりません。)

    • 締切済み
    • CGI
  • PowerShellでGUI付のコピープログラム?

    PowerShellはGUIを持たせることはできるのでしょうか?ファイルをコピーするようなプログラムを作りたいのですが・・・ プログラムのコピーを簡単にするズボラ人間のプログラムなのですが、要件定義としてGUI上にドラッグ&ドロップしたファイルからパスを取得して指定先に単にコピーをするものにしたいと考えていますがそういうのは可能なのでしょうか? VBSではHTMLとかで作れたと思うのですが。。。PSでは見たことがないですね・・・

  • プログラムが完成しました

    VB6.0でシステムを開発しました。今回、社内でみなさんに使用して頂くために配布する事になったのですが、このプログラムファイルを渡すのではなく、exeファイルで渡したいのですが、自作したプログラムをexeファイルに変更するにはどうすれば良いのでしょうか?またexeファイルのアイコン等はどうやって作成するのでしょうか?教えて下さい。

  • プログラムのパラメータの自動入力

    お世話になっております. 以下のようなプログラムがあります. 1. hoge.exe を実行すると 2. Dosウインドウが立ち上がり InputA : _ #入力待ち状態になる,Enterを押すと3.へ 3. inputAにパラメータを入力すると InputB : _ #再び入力待ち状態になる 4.すべてのパラメータを入力すると,プログラムが走って結果がテキストファイルに出力される. そこで質問ですが,この入力(InputA,InputB...)を自動化する方法はあるでしょうか? ソースは無く,exeファイルしか現在は手元にありません. いくつかパラメータを変更して,出力ファイルを比較したいのですが,良い方法は無いでしょうか? 助言を宜しくお願い致します.

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

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

  • VBAで他のプログラムを動かす

    VBAで他のプログラムを動かす時、 shellがあると思うのですが、これはexeファイルしか指定できないのですか? 具体的には指定したtxtファイルをメモ帳等で実行したいのです。 x=shell("目的のプログラム.txt",1) とやってもエラーが起こってしまいます。 どのようにしたらいいのでしょうか?