Windows上でのプログラム実行時のカレントディレクトリはどこか?

コマンドプロンプト上でプログラムを実行した場合

プログラムのカレントディレクトリ(windows的には作業フォルダ)は,コマンドプロンプトでのカレントディレクトリになる.これは当たり前.
つまり,C:\Test にいる状態で

FILE *fp=fopen("test.txt","w");
fprintf(fp,"hello\n");
fclose(fp);
   略

のようなプログラムを実行すると,C:\Test\test.txtが作成され,helloが書き込まれる.

エクスプローラからexeファイルをダブルクリックして起動した場合

この場合のカレントディレクトリは,エクスプローラでのカレントディレクトリ(というかexeファイルが置かれている場所)がプログラムのカレントディレクトリになる.

エクスプローラ上のexeファイルにファイルをドラッグ&ドロップして起動した場合

これに嵌った.調べたところ,このときカレントディレクトリは,なんとユーザのホームディレクトリ(XPならC:\Documents and Settings\ユーザ名,Vista以降ならC:\User\ユーザ名)にできるらしい.

ショートカットから起動した場合

この場合,ショートカットのプロパティの,「作業フォルダ」の項目で指定されたディレクトリがカレントディレクトリとなる.

調べた方法

次のようなWindowsプログラムを書いた.

#include <windows.h>
#include <tchar.h>

int _tmain(){
    TCHAR buf[1024];
    GetCurrentDirectory(buf,1024);
    MessageBox(NULL,buf,TEXT("CurrentDirectory"),MB_OK);
    return 0;
}

これをコンパイルして実行すれば,メッセージボックスにカレントディレクトリが表示される.