デスクトップのパスを取得する方法
Windowsの基礎とも言えるデスクトップです。デスクトップを見ないという人はあまりいないことでしょう。デスクトップは、それ自体がフォルダに過ぎない ということはご存知だと思いますが、それが何処に存在するかを取得するにはどうしたら良い のでしょうか?以前のWindowsにおいてはWindowsディレクトリを取得すれば自動的にデスクトップ の場所も判ったのですが、マルチユーザ環境においては各ユーザ単位のデスクトップが存在し 非常に判りにくくなっています。このような特殊ディレクトリを調べる関数が SHGetSpecialFolderLocationやSHGetPathFromIDListとして用意されています。
void GetDesktopPath()
{
TCHAR szPath[MAX_PATH+1];
LPITEMIDLIST pidl;
HWND hWnd = NULL;
IMalloc *pMalloc;
SHGetMalloc( &pMalloc );
if( SUCCEEDED(SHGetSpecialFolderLocation
(hWnd,CSIDL_DESKTOPDIRECTORY,&pidl)) )
{
// パスに変換する
SHGetPathFromIDList(pidl,szPath);
// 取得したIDLを解放する (CoTaskMemFreeでも可)
pMalloc->Free(pidl);
printf("[%s]\n", szPath);
}
pMalloc->Release();
return;
}
