请问我知道一个共享文件夹的本地名,如何知道得到它的共享名?我翻了半天msdn也没有找到这样的函数,至于读注册表挨个比较我到知道,不过感觉太麻烦了,有没有直接的函数?谢谢大家了。

解决方案 »

  1.   

    WNetOpenEnum(...);
    WNetEnumResource(...);
    WNetCloseEnum(...);
      

  2.   

    http://www.delphibbs.com/delphibbs/dispq.asp?lid=103193
      

  3.   

    枚举共享名吧,像楼上的API函数
      

  4.   

    搜索共享资源    
      Function GetUserResource( UserName : string ; var List : TStringList ) : Boolean; 
    VarNetResource : TNetResource;Buf : Pointer;Count,BufSize,Res : DWord;Ind : Integer;lphEnum : THandle;Temp : TNetResourceArray;BeginResult := False;List.Clear;FillChar(NetResource, SizeOf(NetResource), 0); //初始化网络层次信息NetResource.lpRemoteName := @UserName[1]; //指定计算机名称Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY,RESOURCEUSAGE_CONNECTABLE, @NetResource,lphEnum);//获取指定计算机的网络资源句柄If Res <> NO_ERROR Then exit; //执行失败While True Do //列举指定工作组的网络资源BeginCount := $FFFFFFFF; //不限资源数目BufSize := 8192; //缓冲区大小设置为8KGetMem(Buf, BufSize); //申请内存,用于获取工作组信息Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);//获取指定计算机的网络资源名称If Res = ERROR_NO_MORE_ITEMS Then break;//资源列举完毕If (Res <> NO_ERROR) then Exit; //执行失败Temp := TNetResourceArray(Buf);For Ind := 0 to Count - 1 doBeginList.Add(Temp^.lpRemoteName);Inc(Temp);End;End;Res := WNetCloseEnum(lphEnum); //关闭一次列举If Res <> NO_ERROR Then exit; //执行失败Result := True;FreeMem(Buf);End; procedure TForm1.Button1Click(Sender: TObject);varList:TstringList;i:integer;begintryList:=TstringList.Create;if GetUserResource(edit1.text,List) thenif List.count=0 then //指定计算机下没有找到共享资源beginmemo1.Lines.Add (edit1.text+'下没有找到共享资源!');endelsememo1.Lines.Add (edit1.text+'下的所有共享资源如下:');for i:=0 to List.Count-1 dobeginMemo1.lines.Add (List.strings[i]);end;finallyList:=TstringList.Create; //如有异常则释放分配的资源end;end;