您的位置:首页 > 其它

SHGetSpecialFolderLocation

2015-12-24 22:35 344 查看


void CDlgTestDlg::OnBnClickedOk() { LPITEMIDLIST pidl; TCHAR szPath [MAX_PATH]; if(SUCCEEDED( SHGetSpecialFolderLocation ( NULL, CSIDL_FAVORITES, &pidl ))) { if ( SHGetPathFromIDList ( pidl, szPath )) { CString sDisplayName; SHFILEINFO sfi; ZeroMemory(&sfi,sizeof(sfi)); UINT uFlags = SHGFI_PIDL | SHGFI_DISPLAYNAME; SHGetFileInfo((LPCTSTR)pidl, 0, &sfi, sizeof(SHFILEINFO), uFlags); sDisplayName = sfi.szDisplayName; CString szDisplay; szDisplay.Format(_T(" %s /n /n %s"),szPath, sDisplayName); GetDlgItem(IDC_STATIC)->SetWindowText(szDisplay); CoTaskMemFree(pidl); //free the resource } } }

======================

WINSHELLAPI HRESULT WINAPI SHGetSpecialFolderLocation(

    HWND hwndOwner,

    int nFolder,

    LPITEMIDLIST *ppidl

); 

  hwndOwner: 指定了"所有者窗口",在调用这个函数是可能出现的对话框或信息框.

  nFolder: 是一个整数id,决定哪个目录是待查找目录,它的取值可能是

  CSIDL_BITBUCKET 回收站

  CSIDL_CONTROLS 控制面板

  CSIDL_DESKTOP Windows桌面desktop;

  CSIDL_DESKTOPDIRECTORY desktop的目录;

  CSIDL_DRIVES 我的电脑

  CSIDL_FONTS 字体目录

  CSIDL_NETHOOD 网上邻居

  CSIDL_NETWORK 网上邻居virtual folder

  CSIDL_PERSONAL 我的文档

  CSIDL_PRINTERS 打印机

  CSIDL_PROGRAMS 程序组

  CSIDL_RECENT 最近打开文档

  CSIDL_SENDTO 发送到菜单项

  CSIDL_STARTMENU 快启菜单

  CSIDL_STARTUP 启动目录

  CSIDL_TEMPLATES 临时文档

  ppidl: pidl地址. SHGetSpecialFolderLocation把地址写到pidl.

WINSHELLAPI BOOL WINAPI SHGetPathFromIDList(

    LPCITEMIDLIST pidl,

    LPSTR pszPath

);

 LPITEMIDLIST lml;

 TCHAR szPath[MAX_PATH];

 ::SHGetSpecialFolderLocation(NULL, CSIDL_STARTUP, &lml);

 SHGetPathFromIDList(lml, szPath);

void CDlgTestDlg::OnBnClickedOk()
{
LPITEMIDLIST pidl;
TCHAR szPath [MAX_PATH];
if(SUCCEEDED( SHGetSpecialFolderLocation ( NULL, CSIDL_FAVORITES, &pidl )))
{
if ( SHGetPathFromIDList ( pidl, szPath ))
{
CString sDisplayName;
SHFILEINFO    sfi;
ZeroMemory(&sfi,sizeof(sfi));
UINT uFlags = SHGFI_PIDL | SHGFI_DISPLAYNAME;
SHGetFileInfo((LPCTSTR)pidl, 0, &sfi, sizeof(SHFILEINFO), uFlags);
sDisplayName = sfi.szDisplayName;
CString szDisplay;
szDisplay.Format(_T(" %s  /n  /n %s"),szPath, sDisplayName);
GetDlgItem(IDC_STATIC)->SetWindowText(szDisplay);
CoTaskMemFree(pidl);          //free the resource
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: