実行中のアプリケーションがある場所を調べる・その2

最終更新 2003 10/08

実行中のアプリケーションのパスは、GetCurrentDirectory() 関数で取ったり
CreateFile() 関数で相対パスを使ってしまえば、考えなくても良いような
気もするのですが、カレントディレクトリを使うのも、相対パスを利用するのも
安全なのかどうかがイマイチはっきりしません。
なので GetModuleFileName() 関数で取るほうが無難です。

どうして安全か分からないのかといいますと、実行中のアプリケーションのある
フォルダがいつ、どんな状況でも、どんな環境でも、カレントディレクトリに
なるのかが分からないからです。

ちょっとした拍子にカレントディレクトリが全く関係のない場所に変わるかも
知れません。

GetModuleFileName() 関数を使うと、実行中のアプリケーション名まで取って
来てしまうので、VB の App.Path にあたる「実行中のアプリケーションのある
フォルダ」だけを取りたい場合は少し工夫が必要です。

まー、簡単な処理なのですが・・・。

/*
    GetAppPath
      実行中のアプリケーションのあるフォルダを取得
    引数
      path = パスを受け取る配列のポインタ
      size = path のサイズ
    戻り値
      成功時 = TRUE / 失敗時 = FALSE
*/
BOOL GetAppPath( LPCSTR path, DWORD size )
{
    //アプリケーションのパス取得
    if( !GetModuleFileName( NULL, path, size ) return FALSE;

    char  new_path[MAX_PATH];
    DWORD i, length = lstrlen( path ), bs_pos = 0;

    //パスの一番最後にある \ の位置を調べる
    for( i = length; i > 0; i-- )
        if( path[i] == '\\' ){ bs_pos = i; break; }

    //\までのパスをコピー(\も含む)
    CopyMemory( new_path, path, pos + 1 );
    
    //文字の終端を設定
    new_path[ pos + 1 ] = '\0';
    
    //新しく作ったパスを path に戻す
    wsprintf( path, "%s", new_path );
    
    return TRUE;
}

| back | home |