SHELL程式設計 利用CSIDL開啟特殊資料夾

2021-04-17 06:38:34 字數 1980 閱讀 2053

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 即可把資料和介面...