獲取"我的文件“路徑
方法一:來自網路;
CString getMyDoc() // 獲取“我的文件”路徑 { TCHAR m_lpszDefaultDir[MAX_PATH] = {0}; TCHAR 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); } return CString(szDocument); }
方法二:
函式SHGetSpecialFolderLocation():
#include "shlobj.h" //包含標頭檔案
WINSHELLAPI HRESULT WINAPI SHGetSpecialFolderLocation (HWND hwndOwner, int nFolder,LPITEMIDLIST * ppidl); //函式宣告
hwndOwner: 指定了"所有者視窗",在呼叫這個函式是可能出現的對話方塊或資訊框.
nFolder: 是一個整數id,決定哪個目錄是待查詢目錄,它的取值可能是
CSIDL_BITBUCKET 回收站
CSIDL_CONTROLS 控制面板
CSIDL_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 臨時文件
ppidl: pidl地址. SHGetSpecialFolderLocation把地址寫到pidl.
示例程式碼VC++ 6.0測試通過):
LPITEMIDLIST pidl;
LPMALLOC pShellMalloc;
char szDir[200];
if(SUCCEEDED(SHGetMalloc(&pShellMalloc)))
{
if(SUCCEEDED(SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,&pidl))) {
// 如果成功返回true
SHGetPathFromIDList(pidl, szDir);
pShellMalloc->Free(pidl);
}
pShellMalloc->Release();
}
::MessageBox (NULL,szDir,"Path",MB_OK);
VC獲取指定資料夾路徑
flyfish 2010-3-5
一 使用Shell函式
1 獲取應用程式的安裝路徑
TCHAR buf[_MAX_PATH];
SHGetSpecialFolderPath(NULL,buf,CSIDL_PROGRAM_FILES,NULL);
AfxMessageBox(buf);
2 獲取應用程式資料路徑的資料夾
TCHAR bufApplicateData[_MAX_PATH];
SHGetSpecialFolderPath(NULL,bufApplicateData,CSIDL_APPDATA,NULL);
AfxMessageBox(bufApplicateData);
3 獲取系統資料夾
TCHAR buf[_MAX_PATH];
SHGetSpecialFolderPath(NULL,buf,CSIDL_SYSTEM,NULL);
AfxMessageBox(buf);
4 獲取Windows目錄
TCHAR buf[_MAX_PATH];
SHGetSpecialFolderPath(NULL,buf,CSIDL_WINDOWS,NULL);
AfxMessageBox(buf);
5 獲取其他指定資料夾
主要使用SHGetSpecialFolderPath函式
函式原型:BOOL SHGetSpecialFolderPath(HWND hwndOwner,LPTSTR lpszPath,int nFolder, BOOL fCreate);
引數nFolder指明獲取什麼樣的資料夾。如下參考
MSDN可以搜尋關鍵字:CSIDL
MSDN URL:ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/shellcc/platform/shell/reference/enums/csidl.htm
二 使用其他API函式
1 獲取系統資料夾
TCHAR buf[_MAX_PATH];
GetSystemDirectory( buf, _MAX_PATH );
AfxMessageBox(buf);
2 獲取Windows目錄
TCHAR buf[_MAX_PATH];
GetWindowsDirectory( buf, _MAX_PATH );
AfxMessageBox(buf);
以上程式在VC2005中除錯通過。