在Windows 下有很多的特殊含義的文件夾,如桌面,網上鄰居,字體,我的文檔,
程序組,最近文檔,發送到,開始菜單,啟動等,有時可能需要取得這些文件夾
的真正路徑。
一種方法是通過讀注冊表文件,存放在HKEY_CURRENT_USER根下,目錄為:
SoftwareMicroSoftWindowsCurrentVersionExplorer
可看到在shell folder段中存放著上述文件夾所對應的實際物理目錄,至於如何
讀注冊表的操作不再給出,請自行解決。
另一種方法是調用shell函數可以得到相應的目錄,但是不是所有在shell folder
目錄下的文件夾都可以獲得,請注意。
function GetSpecialFolderDir(const folderid:integer):string;
var
pidl:pItemIDList;
buffer:array [ 0..255 ] of char ;
begin
//取指定的文件夾項目表
SHGetSpecialFolderLocation( application.Handle , folderid, pidl);
SHGetPathFromIDList(pidl, buffer); //轉換成文件系統的路徑
result:=strpas(buffer);
end;
CSIDL_BITBUCKET * 回收站
CSIDL_CONTROLS * 控制面板
CSIDL_DESKTOP * 桌面
CSIDL_DESKTOPDIRECTORY 桌面目錄 //如C:WindowsDesktop
CSIDL_DRIVES * 我的電腦
CSIDL_FONTS 字體 //如C:WindowsFONTS
CSIDL_NETHOOD 網上鄰居目錄 //如C:WindowsNetHood
CSIDL_NETWORK * 網上鄰居
CSIDL_PERSONAL 我的文檔 //如C:My Documents
CSIDL_PRINTERS * 打印機
CSIDL_PROGRAMS 程序組 //如C:WindowsStart MenuPrograms
CSIDL_RECENT 最近文檔 //如C:WindowsRecent
CSIDL_SENDTO 發送到 //如C:WindowsSentTo
CSIDL_STARTMENU 開始菜單 //如C:WindowsStart Menu
CSIDL_STARTUP 啟動 //如C:Windows啟動
CSIDL_TEMPLATES 模版 //如C:WindowsShellNew