• ベストアンサー

ウィンドウを出したくない

OS: Windows 2000 C: Borland C++ Compiler コマンドラインアプリケーション(Hello world!的なもの)を作成しています。 別の方の質問で出来上がったexeファイル実行時ウィンドウを出したくない場合は、main()をWinMain()にすればよいとのことだったのですが、これだとコマンドラインパラメータを渡せなくなってしまいます。 コマンドラインパラメータを渡せて、かつexeファイル実行時にウィンドウを出したくない場合は、どうすればよいでしょうか? 目的はあるウィンドウアプリケーションから外部プログラムとして実行したいのですが、実行中ウィンドウがでてしまっていて、それを避けたいのです。 よろしくお願い致します。

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

  • ベストアンサー
noname#9119
noname#9119
回答No.2

GetCommandLine() でコマンドラインを得る(ただし分解するのが面倒)か、 Borland C++ Compiler なら _argc, _argv というグローバル変数があります。 #include <windows.h> int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow ) { char buf[33]; itoa(_argc, buf, 10); MessageBox(NULL, buf, "test", MB_OK); for (int i=0; i<_argc; i++) { MessageBox(NULL, _argv[i], "test", MB_OK); } return 0; }

noname#27709
質問者

お礼

ご回答ありがとうございます。 ほとんど解像なく一発で解決できました。どうもありがとうございました。 いただいた情報からさらに発展して調べたところ、 ・グローバル変数_argv,_argc ・WinMain()のlpCmdLine ・GetCommandLine() を使う方法がみつかりました。 ありがとうございます。 ところで、_argv,_argcはVisual C++でもサポートされていますでしょうか? あと、追加で質問なのですが、内部でsystem()関数で外部コマンドが出てしまうのですが、このときウィンドウが出てしまいます。これを防ぐ方法と言うのはあるのでしょうか?よろしくお願い致します。

すると、全ての回答が全文表示されます。

その他の回答 (3)

noname#5537
noname#5537
回答No.4

> ところで、_argv,_argcはVisual C++でもサポートされていますでしょうか? > _argv,_argc は Visual C++ には無いみたいですね。 VC++ の場合は __argc, __argv です。(アンダースコア2つ)

noname#27709
質問者

お礼

情報ありがとうございます。 異なるのですね。できるだけコンパイラ依存したくないので、WinMain()のLPSTR lpCmdLineを使ってうまく行っています。ありがとうございます。

すると、全ての回答が全文表示されます。
noname#9119
noname#9119
回答No.3

_argv,_argc は Visual C++ には無いみたいですね。 ファイルの実行には WinExec(), CreateProcess(), または spawn系 の関数なんかがあります。

noname#27709
質問者

お礼

ありがとうございます。 やはりVC++にはないみたいですね。私も探した上で質問させていただいたのですが、ありがとうございました。 プロセス実行に関しては、そんな関数があるのですね?とりあえず、spawn系を使いましたがなんとかなりそうです。他の関数も勉強してみます。ありがとうございます。

すると、全ての回答が全文表示されます。
  • uyama33
  • ベストアンサー率30% (137/450)
回答No.1

exe ではなく、 dll にすればよいと思います。 エクセルなどから、 引数として、ファイル名などを 渡して呼び出せます。 もちろん、新しいウインドウは開きません。

noname#27709
質問者

お礼

ご回答ありがとうございます。 残念ながらそのアプリケーションは、dllを実行するI/Fを持ち合わせておらず、exeファイルを実行しているのですよ。 でも、Excelからdllにパラメータを与えて実行できるなんて知りませんでした。ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A