BOOL SHGetSpecialFolderPath( HWND hwndOwner,
???????????????????????????????? LPTSTR lpszPath,
???????????????????????????????? int nFolder,
???????????????????????????????? BOOL fCreate );
參數解釋:
hwndOwner:Handle to the owner window the client should specify if it displays a dialog box or message box.
lpszPath:Pointer to a null-terminated string that receives the drive and path of the specified folder. This buffer must be at least MAX_PATH characters in size
nFolder:A CSIDL that identifies the folder of interest. If a virtual folder is specified, this function will fail.
fCreate:Indicates if the folder should be created if it does not already exist. If this value is nonzero, the folder will be created. If this value is zero, the folder will not be created.
?
一個簡單的test
建立控制臺程序:
#include "stdafx.h"
#include <Windows.h>
#include <string>
#include <Shlobj.h>using namespace std;;int _tmain(int argc, _TCHAR* argv[])
{WCHAR szPath[MAX_PATH + 1] = { 0 };wstring strMsgW;BOOL bRet;//嚴格一點,每個返回值要判斷bRet = SHGetSpecialFolderPath(NULL, szPath, CSIDL_PROGRAM_FILES, FALSE);strMsgW.append(L"CSIDL_PROGRAM_FILES: ");strMsgW.append(szPath);strMsgW.append(L"\r\n");bRet = SHGetSpecialFolderPath(NULL, szPath, CSIDL_PROGRAM_FILES_COMMON, FALSE);strMsgW.append(L"CSIDL_PROGRAM_FILES_COMMON: ");strMsgW.append(szPath);strMsgW.append(L"\r\n");bRet = SHGetSpecialFolderPath(NULL, szPath, CSIDL_SYSTEM, FALSE);strMsgW.append(L"CSIDL_SYSTEM: ");strMsgW.append(szPath);strMsgW.append(L"\r\n");bRet = SHGetSpecialFolderPath(NULL, szPath, CSIDL_STARTUP , FALSE);strMsgW.append(L"CSIDL_STARTUP: ");strMsgW.append(szPath);strMsgW.append(L"\r\n");bRet = SHGetSpecialFolderPath(NULL, szPath, CSIDL_APPDATA , FALSE);strMsgW.append(L"CSIDL_APPDATA: ");strMsgW.append(szPath);strMsgW.append(L"\r\n");MessageBox(NULL, strMsgW.c_str(), L"SHGetSpecialFolderPath Test", MB_OK);return 0;
}運行結果:
?

?