全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1673
推到 Plurk!
推到 Facebook!

用IShellFolder.EnumObjects列舉出來的物件如何判斷是否為硬碟中的一般檔案或目錄

尚未結案
iamjsn
初階會員


發表:78
回覆:95
積分:44
註冊:2002-08-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-20 12:48:20 IP:203.204.xxx.xxx 未訂閱
想請問各位大大,用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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-20 20:45:31 IP:220.131.xxx.xxx 未訂閱
參考看看:    
 
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.    
網海無涯,唯學是岸! 找對焦點,就會產生方向^_^
系統時間:2024-07-01 11:20:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!