我只能做到这样了,试试看:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,shlobj,activex;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function NetworkBrowsing(parent_window: HWND; caption: String; browse_for: Integer): String;
var
lpbi: _browseInfo;
dn: String;
idlist: ITEMIDLIST;
ridlist: PITEMIDLIST;
ppMalloc: IMalloc;
begin
try
// Get pointer to network root
SHGetSpecialFolderLocation(parent_window, CSIDL_NETWORK, PITEMIDLIST(idlist));
// Initialise & display dialog box
lpbi.hwndOwner:=parent_window;
lpbi.pidlRoot:=PITEMIDLIST(idlist);
SetLength(dn, 255);
lpbi.pszDisplayName:=PChar(dn);
lpbi.lpszTitle:=PChar(caption);
lpbi.ulFlags:=browse_for;
lpbi.lpfn:=nil;
ridlist:=SHBrowseForFolder(lpbi);
// Store the resuls
{xxx
if browse_for <> BIF_BROWSEFORCOMPUTER then begin
// Return the complete network path
SetLength(Result, 255);
SHGetPathFromIDList(ridlist, PChar(Result));
end else
}
// Return only the name of the 'thing' selected
Result:=lpbi.pszDisplayName;
// Free memory
if ridlist=nil then
Result:=''
else begin
SHGetMalloc(ppMalloc);
ppMalloc.Free(ridlist);
end;
except
// Oops
Result:='';
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
label1.caption := NetworkBrowsing(form1.handle, '&Ntilde;&iexcl;&Ocirc;&ntilde;&frac14;&AElig;&Euml;&atilde;&raquo;ú:', BIF_BROWSEFORCOMPUTER);
label2.caption := NetworkBrowsing(form1.handle, '&Ntilde;&iexcl;&Ocirc;&ntilde;&frac14;&AElig;&Euml;&atilde;&raquo;ú:', BIF_RETURNONLYFSDIRS);
end;
end.