デスクトップのパスを取得する方法

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;
}

 

Windows API

Posted by @erestage