在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
|
|