●はじめに (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の引数lpCmdLineとGetCommandLine関数の違いを理解するために、こんなソースコードを書いてみました。 仮に、ソースコードをコンパイルして 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)がどのディレクトリで実行されるのかをチェックしています。 |