SPDL: SHGetSpecialFolderLocation 获得系统特殊目录
2015-06-29 09:43
501 查看
关于得到 pidl (即:PathIDList)
的函数有:
SHGetSpecialFolderLocation(): 获得系统目录的位置,存储到LPITEMIDLIST结构变量 pidl
SHGetPathFromIDList (): 将
pidl 转化为文件夹路径
SHBrowseForFolder():
显示浏览文件夹对话框
SHBrowseForFolder()
是一个可以用于获取文件夹路径的Windows API
SHGetDesktopFolder()
函数原型:
WINSHELLAPI HRESULT WINAPI SHGetSpecialFolderLocation(
HWND hwndOwner,
int nFolder,
LPITEMIDLIST* ppidl
);
依赖文件:
#include <Shlobj.h>
#pragma comment (lib, "Shell32.lib")
函数功能:
该函数获取一个特殊的文件夹的位置,比如我的电脑,回收站,台式机,打印机,字体,或各种文件系统的目录。
函数参数:
(1) hwndOwner: 指定了"所有者窗口",在调用这个函数是可能出现的对话框或信息框。
(2) 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 临时文档
CSIDL_PROFILE 文件夹包含用户的个人资料
CSIDL_WINDOWS Windows文件夹
CSIDL_PROGRAM_FILES Program Files文件夹
(3) ppidl: 指向一个LPITEMIDLIST结构,SHGetSpecialFolderLocation把地址写到pidl.
的函数有:
SHGetSpecialFolderLocation(): 获得系统目录的位置,存储到LPITEMIDLIST结构变量 pidl
SHGetPathFromIDList (): 将
pidl 转化为文件夹路径
SHBrowseForFolder():
显示浏览文件夹对话框
SHBrowseForFolder()
是一个可以用于获取文件夹路径的Windows API
SHGetDesktopFolder()
函数原型:
WINSHELLAPI HRESULT WINAPI SHGetSpecialFolderLocation(
HWND hwndOwner,
int nFolder,
LPITEMIDLIST* ppidl
);
依赖文件:
#include <Shlobj.h>
#pragma comment (lib, "Shell32.lib")
函数功能:
该函数获取一个特殊的文件夹的位置,比如我的电脑,回收站,台式机,打印机,字体,或各种文件系统的目录。
函数参数:
(1) hwndOwner: 指定了"所有者窗口",在调用这个函数是可能出现的对话框或信息框。
(2) 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 临时文档
CSIDL_PROFILE 文件夹包含用户的个人资料
CSIDL_WINDOWS Windows文件夹
CSIDL_PROGRAM_FILES Program Files文件夹
(3) ppidl: 指向一个LPITEMIDLIST结构,SHGetSpecialFolderLocation把地址写到pidl.
下面以在VC中使用为例来获取桌面路径,代码如下: LPITEMIDLIST ppidl; char lpsbuf[255] = {0}; SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP, &ppidl); SHGetPathFromIDList(ppidl, lpsbuf); MessageBox(lpsbuf);
示例代码VC++ LPITEMIDLIST pidl; LPMALLOC pShellMalloc; char szDir[200] = {0}; if(SUCCEEDED(SHGetMalloc(&pShellMalloc))) { if(SUCCEEDED(SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP, &pidl))) { <span style="white-space:pre"> </span>//如果成功返回true SHGetPathFromIDList(pidl, szDir); pShellMalloc->Free(pidl); } pShellMalloc->Release(); } ::MessageBox (NULL, szDir, "Path", MB_OK);
void CDlgTestDlg::OnBnClickedOk() { LPITEMIDLIST pidl; TCHAR szPath [MAX_PATH]; if(SUCCEEDED( SHGetSpecialFolderLocation ( NULL, CSIDL_F***ORITES, &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 } } }
相关文章推荐
- mySQL与Oracle分页查询
- C#导出EXCEL(DataTable导出EXCEL)
- BigDecimal介绍
- AndroidAnnotations 自定义控件 ant编译 找不到类
- android中实现图片的上下移动
- 多线程编程(六)--Callable&Future
- SMS---发送短信
- LeetCode_63---Unique Paths II
- There is a circular dependency between XMPPFramework/Core and XMPPFramework/Authentication
- Scrapy爬虫学习,及实践项目。
- CentOS 配置LAMP环境
- 使用Versions时.a文件不能成功被提交的解决方法
- MongoDB:逐渐变得无关紧要
- 作业6.14
- spring依赖注入失效的原因之一
- ios在SQLite3基本操作
- 重定向
- 收益管理系统(PROS)缘何在中国水土不服?
- Android In <declare-styleable> MenuView, unable to find attribute android:preserveIconSpacing
- Openstack Restful Api