Last Updated 2003/06/19
Programming Tips Windows デスクトップ  索 引 
デスクトップのフォルダ
2003/06/19

デスクトップのフォルダを取得する.

  LPITEMIDLIST  pidl ;

  if( SHGetSpecialFolderLocation( m_hWnd, CSIDL_DESKTOP, &pidl ) == NOERROR ) {
      char path[_MAX_PATH];
      if( SHGetPathFromIDList( pidl, path ) ) {
          MessageBox( path, "CSIDL_DESKTOPDIRECTORY", MB_OK ) ;
      }
  }


以下のコードも参考

class CGetDesktopFolder
{
public:
    BOOL GetSpecialFolderLocation();

private:
    CString m_strDesktopPath;
};

// メンバ変数 m_strDesktopPath に
// デスクトップフォルダのパスを入れる関数
BOOL CGetDesktopFolder::GetSpecialFolderLocation()
{
    BOOL fRet = FALSE;

    // Get the main windows' handle.
    HWND hwndOwner = NULL;
    if( NULL != AfxGetMainWnd() ) {
        hwndOwner = AfxGetMainWnd()->m_hWnd;
        // SHGetSpecialFolderLocation() で使用するハンドル
    }

    // Get the shell's allocator.
    LPMALLOC pMalloc;
    if( SUCCEEDED( SHGetMalloc(&pMalloc) ) ) {
                                    //* シェルの IMalloc インターフェー
                                    //* スへのポインタを獲得 (1)
                                    //* (IMAlloc のインスタンスが出来た)

        // Allocate a buffer to receive information.
        LPSTR lpBuffer;
        if( NULL != (lpBuffer = (LPSTR)pMalloc->Alloc(MAX_PATH)) ) {
                                    //* IMalloc インターフェースに頼んで
                                    //* (つまり Alloc メソッドを使って)
                                    //* バッファのメモリを確保してもらう
                                    //* (2)
                                    //* (※ C とは書き方が違う)

            // Get the PIDL for the Desktop folder.
            LPITEMIDLIST pidl;
            if( SUCCEEDED(SHGetSpecialFolderLocation(
                                hwndOwner,
                                CSIDL_DESKTOPDIRECTORY,
                                &pidl)) ) {
                                    //* ここでは、
                                    //* SHGetSpecialFolderLocation() が
                                    //* IMalloc インターフェースを介して
                                    //* pidl のメモリを確保している (3)

                // Get the file system path.
                if( SHGetPathFromIDList(pidl, lpBuffer) ) {
                    m_strDesktopPath = lpBuffer;
                    fRet = TRUE;            //* SUCCESS!! (^^) *//
                }
                // Free the memory block for pidl.
                pMalloc->Free(pidl);    //* pidl のメモリを解放 (3)
                                        //* (IMalloc の Free メソッド)
            }
            // Free the memory block for lpBuffer.
            pMalloc->Free(lpBuffer);    //* バッファのメモリを解放 (2)
        }
        // Release the shell's allocator.
        pMalloc->Release();             //* IMalloc インターフェースへの
                                        //* ポインタを解放 (1)
                                        //* (IMalloc の Release メソッド)
    }

    return fRet;

}


参照
デスクトップのハンドル
デスクトップへショートカット登録
スタートメニューのパス
前後のTips
デスクトップのフォルダ

DSS ProgrammingTipsCGI Ver2.02