csidl描述及使用說明:
csidl 表示的是windows shell中乙個特殊資料夾的標識值。這裡說的特殊資料夾指的是由windows shell所定義的資料夾,例如:"我的文件","**站","inernet cache資料夾"就是一些由shell指定的特殊資料夾.這些特殊資料夾可以是乙個磁碟上的物理路徑,也可以是乙個虛擬資料夾(virtual folder)!
注:virtual folder
虛擬資料夾是乙個由windows shell定義過的資料夾,但這個資料夾並沒有與你的電腦上的任何物理 路徑相對應.例如:「我的電腦 」就是乙個包含了所有驅動器的虛擬資料夾,還有如「控制面板」也是乙個虛擬資料夾,等等。虛擬資料夾很少應用於非shell函式。
在windows2000/nt中,許多csidl所涉及的資料夾都是針對各個使用者的。但類似於csidl_common_* 可以供所有使用者使用。
在許多應用中,乙個csidl可以與下面的標識之一進行組合使用:
csidl_flag_create($8000)
windows 2000:如果這個csidl所引用的資料夾不存在,則建立這個資料夾!.
csidl_flag_dont_verify($4000)
windows 2000: 無論這個csidl所引用的資料夾是否存在都使用它!
csidl可以在以下api函式中進行操作使用,至於函式的說明,我們可以參照msdn中的api說明:
shgetfolderlocation, shgetfolderpath, shgetspecialfolderlocation, shgetspecialfolderpath
我們看下面乙個例子:
//開啟一些特殊的資料夾,需要加上activex,shellapi,shlobj單元
uses activex, shellapi, shlobj;
function openspecialfolder(flag:integer;handle: hwnd = 0):boolean;
//這裡的flag就是我們需要開啟的資料夾的csidl值
procedure freepidl(pidl: pitemidlist);//釋放掉pitemidlist例項
varallocator: imalloc;
begin
if succeeded(shlobj.shgetmalloc(allocator)) then
begin
allocator.free(pidl);
allocator.release;
end;
end;
varexinfo: tshellexecuteinfo;
begin
fillchar(exinfo, sizeof(exinfo), 0);//給exinfo設定初始值
with exinfo do
begin
cbsize:= sizeof(exinfo);
fmask:= see_mask_flag_ddewait or see_mask_idlist;
wnd:= handle;
nshow:= sw_shownormal;
lpverb:= 'open';
shgetspecialfolderlocation(handle, flag, pitemidlist(lpidlist));//定位到由csidl值指定的資料夾
end;
shellexecuteex(@exinfo);//開啟資料夾
freepidl(exinfo.lpidlist);
end;
//呼叫上面寫的這個函式:
procedure tform1.button5click(sender: tobject);
begin
openspecialfolder($0);//或是openspecialfolder(csidl_desktop),開啟「桌面」視窗
end;
至於csidl與其它函式的配置使用方法,大家可自己參照msdn!
SHELL程式設計 利用CSIDL開啟特殊資料夾
csidl描述及使用說明 csidl 表示的是windows shell中乙個特殊資料夾的標識值。這裡說的特殊資料夾指的是由windows shell所定義的資料夾,例如 我的文件 站 inernet cache資料夾 就是一些由shell指定的特殊資料夾.這些特殊資料夾可以是乙個磁碟上的物理路徑,...
利用CSIDL開啟特殊資料夾
csidl描述及使用說明 csidl 表示的是windows shell中乙個特殊資料夾的標識值。這裡說的特殊資料夾指的是由windows shell所定義的資料夾,例如 我的文件 站 inernet cache資料夾 就是一些由shell指定的特殊資料夾.這些特殊資料夾可以是乙個磁碟上的物理路徑,...
如何利用FutureBuilder提高開發效率
常見場景 抽象模式 轉換成程式語言 以上三種現實情況對應 asyncsnapshot 三個狀態 使用 futurebuilder 處理這個場景 這篇文章的主角,futurebuilder 就是為了解決這個問題存在的。它接收乙個 future 請求,和對應以上幾種情況的 widget 即可把資料和介面...