Windows 系统操作系列API-(1)-SHGetFolderPath

来源:互联网 发布:teambition类似软件 编辑:程序博客网 时间:2024/06/06 07:02

SHGetFolderPath/SHGetFolderPathW (VC获取特殊目录)

C++
HRESULT SHGetFolderPath(  _In_  HWND   hwndOwner,  _In_  int    nFolder,  _In_  HANDLE hToken,  _In_  DWORD  dwFlags,  _Out_ LPTSTR pszPath);
eg:

wstring strCddbCacheDirectory;

WCHAR szApplicationData[MAX_PATH] = L"";// MAX_PATH  == 512
HRESULT hr = S_OK;

// get windows application data directory
hr = SHGetFolderPathW(
NULL, // HWND hwndOwner,
CSIDL_APPDATA,// int nFolder,
NULL, // HANDLE hToken,
0, // DWORD dwFlags,
szApplicationData// LPTSTR pszPath
);

if (hr == S_OK)
{
strCddbCacheDirectory= szApplicationData;

}

key:

·        CSIDL_ADMINTOOLS

·        CSIDL_APPDATA

·        CSIDL_COMMON_ADMINTOOLS

·        CSIDL_COMMON_APPDATA

·        CSIDL_COMMON_DOCUMENTS

·        CSIDL_COOKIES

·        CSIDL_FLAG_CREATE

·        CSIDL_FLAG_DONT_VERIFY

·        CSIDL_HISTORY

·        CSIDL_INTERNET_CACHE

·        CSIDL_LOCAL_APPDATA

·        CSIDL_MYPICTURES

·        CSIDL_PERSONAL

·        CSIDL_PROGRAM_FILES

·        CSIDL_PROGRAM_FILES_COMMON

·        CSIDL_SYSTEM

·        CSIDL_WINDOWS


Examples-2

The following code example uses SHGetFolderPath to find or create a folder and then creates a file in it.

C++
TCHAR szPath[MAX_PATH];if(SUCCEEDED(SHGetFolderPath(NULL,                              CSIDL_PERSONAL|CSIDL_FLAG_CREATE,                              NULL,                              0,                              szPath))) {    PathAppend(szPath, TEXT("New Doc.txt"));    HANDLE hFile = CreateFile(szPath, ...);}

Requirements

Minimum supported client

Windows 2000 Professional, Windows XP [desktop apps only]

Minimum supported server

Windows 2000 Server [desktop apps only]

Header

Shlobj.h

Library

Shell32.lib

DLL

Shell32.dll (version 5.0 or later)

Unicode and ANSI names

SHGetFolderPathW (Unicode) and SHGetFolderPathA (ANSI)


links:

https://msdn.microsoft.com/en-us/library/windows/desktop/bb762181.aspx