取得某些特殊資料夾路徑

findumars發表於2013-12-19

取得某些特殊資料夾路徑

 

 

 

   在Windows 下有很多的特殊含義的資料夾,如桌面,網路上的芳鄰,字型,我的文件,
程式組,最近文件,傳送到,開始選單,啟動等,有時可能需要取得這些資料夾
的真正路徑。
一種方法是通過讀登錄檔檔案,存放在HKEY_CURRENT_USER根下,目錄為:
Software\MicroSoft\Windows\CurrentVersion\Explorer
可看到在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;


其中:folderid可以取下面的值:但是請注意,有些是虛的資料夾,不是檔案系統
的一部分,所以用SHGetPathFromIDList是取不出路徑的,但是在此也列出了。打*
號的為不是真正的檔案系統,應該用作它用。


CSIDL_BITBUCKET         *   回收站
CSIDL_CONTROLS          *   控制皮膚
CSIDL_DESKTOP           *   桌面
CSIDL_DESKTOPDIRECTORY      桌面目錄       //如C:\WINDOWS\Desktop
CSIDL_DRIVES            *   我的電腦
CSIDL_FONTS                 字型           //如C:\WINDOWS\FONTS
CSIDL_NETHOOD               網路上的芳鄰目錄   //如C:\WINDOWS\NetHood
CSIDL_NETWORK           *   網路上的芳鄰
CSIDL_PERSONAL              我的文件       //如C:\My Documents
CSIDL_PRINTERS          *   印表機
CSIDL_PROGRAMS              程式組         //如C:\WINDOWS\Start Menu\Programs
CSIDL_RECENT                最近文件       //如C:\WINDOWS\Recent
CSIDL_SENDTO                傳送到         //如C:\WINDOWS\SentTo
CSIDL_STARTMENU             開始選單       //如C:\WINDOWS\Start Menu
CSIDL_STARTUP               啟動           //如C:\WINDOWS\啟動
CSIDL_TEMPLATES             模版           //如C:\WINDOWS\ShellNew

相關文章