SPDL: SHGetSpecialFolderLocation 获得系统目录的位置

关于得到 pidl (即:PathIDList)
的函数有:

SHGetSpecialFolderLocation():    获得系统目录的位置

SHGetPathFromIDList ():              将
pidl 转化为文件夹路径

SHBrowseForFolder():
                 显示浏览文件夹对话框

SHBrowseForFolder()
                  是一个可以用于获取文件夹路径的Windows API

SHGetDesktopFolder()

函数原型:

WINSHELLAPI HRESULT WINAPI SHGetSpecialFolderLocation(

HWND hwndOwner,

int nFolder,

LPITEMIDLIST* ppidl

);

依赖文件:

#include <Shlobj.h>

#pragma once (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_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
		}
	}
}  
时间: 2024-10-29 10:45:40

SPDL: SHGetSpecialFolderLocation 获得系统目录的位置的相关文章

一些linux工具在windows版本下的文件放置位置

首先说明一下windows下的常用变量(这里是XP的,win7及以上的C:\Documents and Settings实际为C:\Users) %SystemDrive%        操作系统所在的分区号.如   C: %SystemRoot%         操作系统根目录.如 C:\WINDOWS %windir%                   操作系统根目录.如 C:\WINDOWS %ALLUSERSPROFILE%           相当于   C:\Documents a

Windows 系统目录变量-转

WINDOWS系统变量 桌面路径: echo %systemdrive%%homepath%\桌面 %HOMEDRIVE% = C:\ 当前启动的系统的所在分区 %SystemRoot% = C:\WINDOWS 当前启动的系统的所在目录 %windir% = %SystemRoot% = C:\WINDOWS 当前启动的系统的所在目录 %USERPROFILE% = C:\Documents and Settings\sihochina 当前用户数据变量 %HOMEPATH% = C:\Doc

Windows系统变量列表

%ALLUSERSPROFILE% : 列出所有用户Profile文件位置. %APPDATA% :  列出应用程序数据的默认存放位置. %CD% :  列出当前目录. %CLIENTNAME% :  列出联接到终端服务会话时客户端的NETBIOS名. %CMDCMDLINE% :  列出启动当前cmd.exe所使用的命令行. %CMDEXTVERSION% :  命令出当前命令处理程序扩展版本号. %CommonProgramFiles% :  列出了常用文件的文件夹路径. %COMPUTER

什么是环境变量

环境变量 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等. 环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息.例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找.用户通过设置环境变量,来更好的运行进程. 中文名 环境变量 外文名

常用环境变量及设置

常见环境变量 WINDOWS系统 %ALLUSERSPROFILE% 局部 返回所有“用户配置文件”的位置. %APPDATA% 局部 返回默认情况下应用程序存储数据的位置. %CD% 局部 返回当前目录字符串. %CMDCMDLINE% 局部 返回用来启动当前的 Cmd.exe 的准确命令行. %CMDEXTVERSION% 系统 返回当前的“命令处理程序扩展”的版本号. %COMPUTERNAME% 系统 返回计算机的名称. %COMSPEC% 系统 返回命令行解释器可执行程序的准确路径.

Windows 系统变量大全

来源:http://blog.csdn.net/kingwolf_javascript/article/details/2477234 %ALLUSERSPROFILE% : 列出所有用户Profile文件位置. %APPDATA% :   列出应用程序数据的默认存放位置.%CD% :   列出当前目录.%CLIENTNAME% :   列出联接到终端服务会话时客户端的NETBIOS名.%CMDCMDLINE% :   列出启动当前cmd.exe所使用的命令行.%CMDEXTVERSION% :

修改数据文件和日志文件路径

环境及需求操作系统:Microsoft Windows Server 2008 R2 Enterprise数据库:Microsoft SQL Server 2008 R2 (SP3)服务器增加Fusion-io存储,需将数据库文件迁移到Fusion-io迁移文件必定涉及数据库服务的重启,给定维护时间1小时.服务器上只安装一个数据库实例,实例下面有33个用户数据库(一个小游戏对应一个库),部分数据库有多个数据文件.考虑到要迁移的数据文件个数有107个,最佳方式是使用: ALTER DATABASE

java基础 1-path

path(环境变量)是dos以前的内部命令,windows继续沿用至今.用作运行某个命令的时候,本地查找不到某个命令或文件,会到这个声明的目录中去查找.一般设定java的时候为了在任何目录下都可以运行bin文件夹下的命令.就将java的bin目录声明到path中.在dos下运行path命令就可以设定或查看.在windows中要在系统设置中设定. 常见环境变量 WINDOWS系统 %ALLUSERSPROFILE% 局部 返回所有“用户配置文件”的位置. %APPDATA% 局部 返回默认情况下应

Delphi 的知识体系

第一部分   快速开发的基础 第1章   Delphi 5下的Windows编程    1 1.1   Delphi产品家族    1 1.2  Delphi是什么    3 1.2.1   可视化开发环境    3 1.2.2   编译器的速度和已编译代码的效            率    4 1.2.3   编程语言的功能及其复杂性    4 1.2.4   数据库结构的灵活性和可扩展性    5 1.2.5   框架对设计和使用模式的扩充    5 1.3   历史回顾    5 1.3