获得特殊文件夹路径基础
来源:互联网 发布:软件测试工资待遇2015 编辑:程序博客网 时间:2024/05/18 00:25
#include <windows.h>
#include <shlobj.h>
#pragma comment( lib, "shell32.lib")
#include <iostream>
int main(int argc, char* argv[])
{
char m_lpszDefaultDir[MAX_PATH];
char szDocument[MAX_PATH]={0};
memset(m_lpszDefaultDir,0,_MAX_PATH);
LPITEMIDLIST pidl=NULL;
SHGetSpecialFolderLocation(NULL, CSIDL_PERSONAL, &pidl);
if (pidl && SHGetPathFromIDList(pidl, szDocument))
{
GetShortPathName(szDocument,m_lpszDefaultDir,_MAX_PATH);
}
std::cout<<m_lpszDefaultDir<<std::endl;
printf("Hello World!\n");
return 0;
}
使用API函数SHGetSpecialFolderLocation。shlobj.h里有SHGetSpecialFolderLocation的原型声明。这个函数可以帮我们找到Windows的桌面目录、启动目录、我的文档目录等。
SHGetSpecialFolder需要三个参数。 第一个参数是HWND,它指定了"所有者窗口":在调用这个函数时可能出现的对话框或消息框。第二个参数是一个整数id,决定哪个目录是待查找目录,它的取值可能是:
CSIDL_BITBUCKET回收站CSIDL_CONTROLS控制面板CSIDL_DESKTOPWindows 桌面DesktopCSIDL_DESKTOPDIRECTORYDesktop的目录CSIDL_DRIVES我的电脑CSIDL_FONTS字体目录CSIDL_NETHOOD网上邻居CSIDL_NETWORK网上邻居虚拟目录CSIDL_PERSONAL我的文档CSIDL_PRINTERS打印机CSIDL_PROGRAMS程序组CSIDL_RECENT最近打开的文档CSIDL_SENDTO“发送到”菜单项CSIDL_STARTMENU任务条启动菜单项CSIDL_STARTUP启动目录CSIDL_TEMPLATES文档模板
这里只是最常用的部分。完整的请参考http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/enums/csidl.asp。
最后一个参数是pidl地址。SHGetSpecialFolderLocation把地址写到pidl。
下面是一个例子:
LPITEMIDLIST pidl;
TCHAR szPath [MAX_PATH];
LPMALLOC pMalloc;
if ( SUCCEEDED( SHGetSpecialFolderLocation ( NULL, CSIDL_DRIVES, &pidl )))
{
SHELLEXECUTEINFO sei;
ZeroMemory(&sei, sizeof(sei));
sei.cbSize = sizeof(sei);
sei.fMask = SEE_MASK_IDLIST;
sei.lpIDList = pidl;
sei.lpVerb = "open";
sei.hwnd = AfxGetMainWnd()->GetSafeHwnd();
sei.nShow = SW_SHOWNORMAL;
ShellExecuteEx(&sei);
if ( SUCCEEDED( SHGetMalloc ( &pMalloc )))
{
pMalloc->Free ( pidl );
pMalloc->Release();
}
}
由于“我的电脑”是虚拟文件夹,所以必须使用ShellExecuteEx函数,如果是普通文件夹,则可以使用SHGetPathFromIDList获得文件名,然后利用ShellExecute函数打开。例如要打开“发送到”文件夹,可以这样:
if( SUCCEEDED( SHGetSpecialFolderLocation ( NULL, CSIDL_SENDTO, &pidl )))
{
if ( SHGetPathFromIDList ( pidl, szPath ))
{
ShellExecute(AfxGetMainWnd()->GetSafeHwnd(),
"open", szPath, NULL, NULL,
SW_SHOWNORMAL);
}
if ( SUCCEEDED( SHGetMalloc ( &pMalloc )))
{
pMalloc->Free ( pidl );
pMalloc->Release();
}
}
如果是虚拟文件夹,SHGetPathFromIDList函数会失败。
对于普通文件夹也可以使用SHGetSpecialFolderPath函数,而不使用SHGetSpecialFolderLocation函数,这样更简单些,但运行环境必须是Windows 2000以后的操作系统或安装了IE 4.0以上版本。
原文链接:http://www.cppblog.com/AutomateProgram/archive/2009/05/22/85356.html
- 获得特殊文件夹路径基础
- 获取特殊文件夹路径
- 浏览获得文件夹路径
- C#文件夹路径获得
- 获得文件夹的路径
- 如何获得系统特殊路径
- VC获得系统文件夹路径
- C#获得文件夹的路径
- 获得tomcat文件夹的路径
- 打开文件夹获得图片路径
- 获得系统特殊路径函数SHGetSpecialFolderLocation()
- 获得系统特殊路径函数SHGetSpecialFolderLocation
- 获得系统特殊路径函数SHGetSpecialFolderLocation()
- .net获取系统特殊文件夹路径
- VC获取系统特殊文件夹的路径
- VC获取系统特殊文件夹的路径
- C#获取系统的特殊文件夹路径
- .Net获取系统特殊文件夹路径
- android介绍
- [java]在eclipse中如何输入命令行参数(主函数中的参数)
- 7z解压命令
- java基础加强--JDK1.5新特性
- sql2005的表结构修改和数据库创建和授权的讲解
- 获得特殊文件夹路径基础
- 献给各位新手——真正搞清楚javascript闭包(1)
- Java中RMI应用(Ant build)
- [java]异常
- 深入理解Flash Player的应用程序域--Application Domains
- webservice 数据绑定与映射
- 【SQL Server数据迁移】链接服务器、分布式查询:SQL Server、ORACLE、Excel、txt、Access
- 解决NFS 挂载错误 mount:RPC timed out
- 系统管理员设置了系统策略,禁止进行此安装,解决办法【转】