●はじめに (1999/02/21 KPJ with CCB)
 今回は、プログラム起動時に受け取る引数について書きたいと思います。
●アプリケーション自身の情報を取得するには?
 Windowsのプログラム上では、Winmain関数が最初に呼び出されます。Winmainは、

int WINAPI WinMain(
 HINSTANCE hInstance,
 HINSTANCE hPrevInstance,
 LPSTR lpCmdLine,
 int nShowCmd
)

と定義されています。

hInstance : 自分自身(アプリケーション)のインスタンスハンドル
hPrevInstance : Windows 95では、常にNULL
lpCmdLine : コマンドラインから受け取る引数(文字列)
nShowCmd : アプリケーションが開くウィンドウ画面の初期状態

 lpCmdLineはアプリケーションのあとに続く引数の値で、アプリケーション自身の情報(実行ファイル名)は含みません

 そこで、アプリケーション自身の情報を知りたいときには、GetCommandLine関数を使います。

 LPTSTR GetCommandLine(VOID)

 この関数は、実行ファイル名とコマンドライン上の引数を合わせて返します
●Winmainが受け取る引数とGetCommandLine関数について
 さて、先ほど説明したWinmainの引数lpCmdLineGetCommandLine関数の違いを理解するために、こんなソースコードを書いてみました。

 仮に、ソースコードをコンパイルして C:\Windowsの下に getcmdln.exeというファイルができたとしましょう。
 これを MS-DOSプロンプト(「ファイル名を指定して実行」でも可)から、以下のように実行したとします。

C:\Windows\getcmdln.exe aaa bbb
("aaa"と "bbb"は、getcmdln.exeに与えた引数)

 まず、1つ目の MessageBox(Winmainの引数 lpCmdLineの値)では

aaa bbb

が表示されます。で、2つ目の MessageBox(関数 GetCommandLineの値)では、

"C:\Windows\getcmdln.exe" aaa bbb

が表示されます。

 Winmainの引数 lpCmdLineには、アプリケーションの情報が含まれていないのが分かりますね。
●あとがき
 「クイズ3」では、GetCommandLineを使って、クイズ3のプログラム(quiz3.exe)がどのディレクトリで実行されるのかをチェックしています。