OrangeMaker_logo
memo アイコン SDK-MFC 備忘録

Windows SDKやMFCに関するメモです。
(記載内容について正しいことを保証するものではありません。MSDN等で確認してください)

ウィンドウアプリで起動引数をとる

ウィンドウアプリでも、起動引数でオプション動作を規定したいことがあります。

その1)winmain()の引数からとる

 sdkのプログラムの場合はWinMain()の第3引数からコマンドラインがとれます。
ただ、ここでとれるのは実行ファイル名を含む1行のコマンドラインなので自分で文字列スペース区切りで分割する必要があります。

その2)stdioのグローバル変数からとる

unix互換のため、unixプログラミングでおなじみのargc,argvが用意されています。
argc->__argc
argv->__argv

という風に頭にアンダースコアが2個入った名前でアクセスできます。

マルチバイトの環境ならこのまま使用すればいいのですが、UNICODE環境の場合は使いづらいので、次に紹介する方法が便利です。

その3)CommandLineToArgvW()でコマンドラインを取得する

 UNICODEの場合はCommandLineToArgvW()でコマンドラインを取得する方法があります。

{//UNICODEでコマンドラインを取得する例
    int i;
int nArgs; LPTSTR *lplpszArgs; lplpszArgs = CommandLineToArgvW(GetCommandLine(), &nArgs); for (i = 1; i < nArgs; i++) { CString s = lplpszArgs[i];//i番目の引数 if(s == _T("-ABC")){ //ここに-ABCの引数の処理 } } LocalFree(lplpszArgs);//処理が終わったら開放しておく }