Windows2000 上でVC6.0 sp5 MFC SDIベースのアプリ開発をしています。
作成したアプリから、別に作成したアプリを"パラメータあり"で起動させたいと思っています。
起動方法は、
ShellExecute(m_hWnd, "open", XXX.exe, param, NULL, SW_SHOW);
を使ってやりたいと思っています。
起動される側のプログラムで、パラメータの受け取り方が分からないのですが、
どのように受け取れば良いのでしょうか。
分かる方がいましたら、よろしくお願いいたします。
こんな感じです。
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 がそれぞれ設定されます。
コンソール版は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が入ります。
noritsuuさん、fukuさん ありがとうございました。
無事、起動時にパラメータを取得できました。
OnInitDialog内で
CString str = theApp.m_lpCmdLine;
と書いて値を取得できました。
また、noritsuuさんのに近い形では、
CString stra = __argv[1];
CString strb = __argv[2];
という形でパラメータを別々に格納できました。
ありがとうございました。
ツイート | ![]() |