作成した実行ファイルをパラメータ指定で起動させるには?

解決


geo  2003-08-22 21:12:56  No: 51967

Windows2000 上でVC6.0 sp5 MFC SDIベースのアプリ開発をしています。
作成したアプリから、別に作成したアプリを"パラメータあり"で起動させたいと思っています。
起動方法は、
ShellExecute(m_hWnd, "open", XXX.exe, param, NULL, SW_SHOW);
を使ってやりたいと思っています。
起動される側のプログラムで、パラメータの受け取り方が分からないのですが、
どのように受け取れば良いのでしょうか。
分かる方がいましたら、よろしくお願いいたします。


noritsuu  2003-08-22 23:08:24  No: 51968

こんな感じです。

int main(int argc, char * argv[])
{
・・・
}

argcには引数の数、argvにはコマンドライン引数が設定されます。
例として、APP.EXEという実行ファイルに

APP /A123 ABC

のようにコマンドライン引数を設定した場合argcには3が設定されます。(実行ファイル名を含む)

arcv[0]には "APP.EXE"
argv[1]には "/A123"
argv[2]には "ABC"
argv[3]には NULL がそれぞれ設定されます。


fuku  2003-08-23 03:30:50  No: 51969

コンソール版はnoritsuuさんの通りですが、
Win版はやり方が異なります。

Win版ではtheApp.m_lpCmdLineというグローバル変数でアクセスできます。
theAppはXXXAppクラスのオブジェクトなので、externしなければ多分使えません。

格納のされ方はスペースで区切られる事はなく、そのまま渡されます。
例として、
>ShellExecute(m_hWnd, "open", XXX.exe, param, NULL, SW_SHOW);
のparamが"/abc /def 1234"だったら、そのまま"/abc /def 1234"となります。

ちなみに、起動時に引数が無くてもこの変数自体はNULLにはならず、[0]に\0が入ります。


geo  2003-08-23 22:17:45  No: 51970

noritsuuさん、fukuさん ありがとうございました。
無事、起動時にパラメータを取得できました。
OnInitDialog内で
CString str = theApp.m_lpCmdLine;
と書いて値を取得できました。

また、noritsuuさんのに近い形では、
CString stra = __argv[1];
CString strb = __argv[2];
という形でパラメータを別々に格納できました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加