close
首頁 本類如何取得「我的文檔」和「Program Files」等目錄的實際路徑?
我想在程序中取得系統中的「我的文檔」和「Program Files」兩個目錄,並且在其中建立下級目錄,用什麼函數呢?
因為如果機器中裝有多套系統,這兩個文件夾的位置是不同的,用什麼辦法可以得到當前的實際路徑?
請教各位!
可能要讀註冊表阿
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerShell FoldersPersonal就是我的文檔的路徑。
至於Program Files,是在每個磁盤下都會有的,它沒什麼特殊的,不過ie什麼的一般會裝到c盤的Program Files下。
SHGetSpecialFolderLocation(Handle,CSIDL_HISTORY, pidl);
SHGetPathFromIDList(pidl, buf);
//CSIDL_STARTMENU 當前用戶[開始]菜單
//CSIDL_COMMON_STARTMENU 所有用戶[開始]菜單
//CSIDL_COMMON_PROGRAMS 所有用戶[開始]-[程序]
//CSIDL_COMMON_STARTUP 所有用戶[開始]-[程序]-[啟動]
//CSIDL_DESKTOP 當前用戶[桌面]
//CSIDL_PROGRAMS 當前用戶[開始]-[程序]
//CSIDL_PERSONAL 當前用戶[My Document]我的文檔
//CSIDL_FAVORITES 當前用戶[收藏夾]
//CSIDL_STARTUP 當前用戶[開始]-[程序]-[啟動]
//CSIDL_RECENT 當前用戶[Recent]文件夾
//CSIDL_SENDTO 當前用戶[SendTo]文件夾
//CSIDL_DESKTOPDIRECTORY 當前用戶[桌面]
//CSIDL_NETHOOD 當前用戶[NetHood]網上鄰居
//CSIDL_FONTS 字體文件夾
//CSIDL_TEMPLATES 當前用戶[Templates]臨時文件目錄
//CSIDL_COMMON_DESKTOPDIRECTORY 所有用戶[桌面]
//CSIDL_APPDATA 當前用戶[Application Data]目錄
//CSIDL_PRINTHOOD 當前用戶[PrintHood]目錄
//CSIDL_COMMON_FAVORITES 所有用戶[Favorites]收藏夾
//CSIDL_INTERNET_CACHE 當前用戶IE瀏覽器臨時文件夾
//CSIDL_COOKIES 當前用戶[Cookies]目錄
//CSIDL_HISTORY 當前用戶[History]歷史記錄目錄
//將.cpp文件前面的#include <vcl.h>註釋掉
//#include <vcl.h>
#include <ShlObj.h>
#include <ActiveX.hpp>
AnsiString GetSpecialFolderPath(HWND Handle,int CSID)
{
char buf[MAX_PATH];
LPITEMIDLIST pidl;
memset(buf,0,MAX_PATH);
if( SUCCEEDED(SHGetSpecialFolderLocation(Handle,CSID,&pidl)))
SHGetPathFromIDList(pidl,buf);
return AnsiString(buf);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
MessageBox (Handle,("我的文檔路徑為:"+GetSpecialFolderPath(Handle,CSIDL_PERSONAL)+" rProgram Files路徑為:"+GetSpecialFolderPath(Handle,CSIDL_PROGRAM_FILES)). c_str(),Caption.c_str(),MB_OK);
}
多謝各位。
我想在程序中取得系統中的「我的文檔」和「Program Files」兩個目錄,並且在其中建立下級目錄,用什麼函數呢?
因為如果機器中裝有多套系統,這兩個文件夾的位置是不同的,用什麼辦法可以得到當前的實際路徑?
請教各位!
可能要讀註冊表阿
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerShell FoldersPersonal就是我的文檔的路徑。
至於Program Files,是在每個磁盤下都會有的,它沒什麼特殊的,不過ie什麼的一般會裝到c盤的Program Files下。
SHGetSpecialFolderLocation(Handle,CSIDL_HISTORY, pidl);
SHGetPathFromIDList(pidl, buf);
//CSIDL_STARTMENU 當前用戶[開始]菜單
//CSIDL_COMMON_STARTMENU 所有用戶[開始]菜單
//CSIDL_COMMON_PROGRAMS 所有用戶[開始]-[程序]
//CSIDL_COMMON_STARTUP 所有用戶[開始]-[程序]-[啟動]
//CSIDL_DESKTOP 當前用戶[桌面]
//CSIDL_PROGRAMS 當前用戶[開始]-[程序]
//CSIDL_PERSONAL 當前用戶[My Document]我的文檔
//CSIDL_FAVORITES 當前用戶[收藏夾]
//CSIDL_STARTUP 當前用戶[開始]-[程序]-[啟動]
//CSIDL_RECENT 當前用戶[Recent]文件夾
//CSIDL_SENDTO 當前用戶[SendTo]文件夾
//CSIDL_DESKTOPDIRECTORY 當前用戶[桌面]
//CSIDL_NETHOOD 當前用戶[NetHood]網上鄰居
//CSIDL_FONTS 字體文件夾
//CSIDL_TEMPLATES 當前用戶[Templates]臨時文件目錄
//CSIDL_COMMON_DESKTOPDIRECTORY 所有用戶[桌面]
//CSIDL_APPDATA 當前用戶[Application Data]目錄
//CSIDL_PRINTHOOD 當前用戶[PrintHood]目錄
//CSIDL_COMMON_FAVORITES 所有用戶[Favorites]收藏夾
//CSIDL_INTERNET_CACHE 當前用戶IE瀏覽器臨時文件夾
//CSIDL_COOKIES 當前用戶[Cookies]目錄
//CSIDL_HISTORY 當前用戶[History]歷史記錄目錄
//將.cpp文件前面的#include <vcl.h>註釋掉
//#include <vcl.h>
#include <ShlObj.h>
#include <ActiveX.hpp>
AnsiString GetSpecialFolderPath(HWND Handle,int CSID)
{
char buf[MAX_PATH];
LPITEMIDLIST pidl;
memset(buf,0,MAX_PATH);
if( SUCCEEDED(SHGetSpecialFolderLocation(Handle,CSID,&pidl)))
SHGetPathFromIDList(pidl,buf);
return AnsiString(buf);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
MessageBox (Handle,("我的文檔路徑為:"+GetSpecialFolderPath(Handle,CSIDL_PERSONAL)+" rProgram Files路徑為:"+GetSpecialFolderPath(Handle,CSIDL_PROGRAM_FILES)). c_str(),Caption.c_str(),MB_OK);
}
多謝各位。
全站熱搜
留言列表