同上

解决方案 »

  1.   

    Directory 为''表示  我的电脑
      

  2.   

    利用SHGetSpecialFolderLocation取得网上邻居的ItemID,作为Root的参数传给下面的函数(这个函数和SelectDirectory一样,但功能可以自己定制)。function BrowseForFolder(Caption: String; Root: PItemIDList;
      Flags: Cardinal = 0): PItemIDList;
    var
      BrowseInfo: TBrowseInfo;
      Buffer: PChar;
    begin
      FillChar(BrowseInfo, SizeOf(BrowseInfo), 0);
      Buffer := SHAlloc(MAX_PATH);
      with BrowseInfo do
      begin
        hwndOwner := Application.Handle;
        pidlRoot := Root;
        pszDisplayName := Buffer;
        lpszTitle := PChar(Caption);
        ulFlags := Flags;
      end;
      Result := SHBrowseForFolder(BrowseInfo);
      SHFree(Buffer);
    end;
      

  3.   

    谢谢Rainsea(飞龙在天)但我不知道SHAlloc及ShFree在那里来的,我把这个函数改为了:function BrowseForFolder(Caption: String; Root: PItemIDList;
      Flags: Cardinal = 0): PItemIDList;
    var
      BrowseInfo: TBrowseInfo;
      ShellMalloc: IMalloc;
      Buffer: PChar;
    begin
      FillChar(BrowseInfo, SizeOf(BrowseInfo), 0);
      ShGetMalloc(ShellMalloc);
      Buffer := ShellMalloc.Alloc(MAX_PATH);
      with BrowseInfo do
      begin
        hwndOwner := Application.Handle;
        pidlRoot := Root;
        pszDisplayName := Buffer;
        lpszTitle := PChar(Caption);
        ulFlags := Flags;
      end;
      Result := SHBrowseForFolder(BrowseInfo);
      ShellMalloc.Free(Buffer);
    end;调用时,我的电脑:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Root: PItemIDList;
    begin
      SHGetSpecialFolderLocation(Form1.Handle,CSIDL_DRIVES , Root);
      BrowseForFolder('aa',Root);
    end;调用时,网上邻居:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Root: PItemIDList;
    begin
      SHGetSpecialFolderLocation(Form1.Handle,CSIDL_NETWORK, Root);
      BrowseForFolder('aa',Root);
    end;
    To:happyzsl(学习)
    Directory 为'',并不能把我的电脑设置为根的。