デスクトップのパスを取得する方法
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; }