用IShellFolder.EnumObjects列舉出來的物件如何判斷是否為硬碟中的一般檔案或目錄 |
尚未結案
|
iamjsn
初階會員 ![]() ![]() 發表:78 回覆:95 積分:44 註冊:2002-08-16 發送簡訊給我 |
想請問各位大大,用IShellFolder.EnumObjects列舉出來的物件
如何判斷它是否為某些"特殊裝置",或者有什麼方法能判別這些物件
這邊所指的特殊裝置如:(就是一些沒有實際路徑的物件)
我的電腦
控制台
網路芳鄰 //因為特定原因,我需要使用FindFirst去找出指定路徑下的檔案
//而上面我所指的這些特殊裝置並沒有實際路徑,我希望能避開這些物件
//至於網路芳鄰因沒有打算使用FindFirst,所以也希望能作判斷加以避開
//不知有沒有特定api能直接由列舉出的PItemIDList來判斷物件是否為網路資源
謝謝 ---------------------------------------------------------------
列舉程式碼大致如下: try HR := ShellFolder.EnumObjects(0, Flags, EnumList); if HR <> S_OK then Exit; Result := EnumList.Next(1, ID, NumIDs) = S_OK; finally SetErrorMode(ErrMode); end; |
qoo1234
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:256 回覆:1167 積分:659 註冊:2003-02-24 發送簡訊給我 |
參考看看:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,ActiveX, ShlObj; type TForm1 = class(TForm) ListBox1: TListBox; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; function PathIsRootA(pszPath: PAnsiChar): BOOL; stdcall; external 'Shlwapi.dll'; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var pShell, ShellFolder: IShellFolder; pidl: PITEMIDLIST; PMalloc: IMalloc; sName: string; EnumIDList: IEnumIDList; pceltFetched: ULONG; lpName: TStrRet; slDirectories: TStringList; begin slDirectories := TStringList.Create; try SHGetDesktopFolder(ShellFolder); SHGetSpecialFolderLocation(0,CSIDL_DRIVES, pidl); SHGetMalloc(PMalloc); ShellFolder.BindToObject(pidl, nil, IID_IShellFolder, Pointer(pShell)); pShell.EnumObjects(0,SHCONTF_FOLDERS, EnumIDList); while EnumIDList.Next(1,pidl, pceltFetched) = S_ok do begin pceltFetched := 0; lpName.uType := 0; pShell.GetDisplayNameOf(pidl, SHGDN_FORPARSING, lpName); sName := lpName.pOleStr; if PathIsRootA(Pchar(sName)) then slDirectories.Add(sName); end; ListBox1.Items.Assign(sldirectories); finally pMalloc._Release; pMalloc := nil; slDirectories.Free; end; end; end. ![]() |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |