unit   Unit1;   
    
  interface   
    
  uses   
      Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,   
      StdCtrls,   ComCtrls,   ImgList,   ExtCtrls,   ToolWin;   
    
  type   
      TForm1   =   class(TForm)   
          ImageList1:   TImageList;   
          ToolBar1:   TToolBar;   
          ToolButton1:   TToolButton;   
          Panel1:   TPanel;   
          ResourceTree:   TTreeView;   
          Splitter1:   TSplitter;   
          ResourceList:   TListView;   
          Panel2:   TPanel;   
          lbScope:   TLabel;   
          lbType:   TLabel;   
          lbDisplayType:   TLabel;   
          lbUsage:   TLabel;   
          lbLocalName:   TLabel;   
          lbRemoteName:   TLabel;   
          lbComment:   TLabel;   
          lbProvider:   TLabel;   
          ToolButton2:   TToolButton;   
          procedure   Button1Click(Sender:   TObject);   
          procedure   ResourceTreeChange(Sender:   TObject;   Node:   TTreeNode);   
          procedure   ToolButton2Click(Sender:   TObject);   
      private   
          {   Private   declarations   }   
      public   
          {   Public   declarations   }   
          function   AddTreeItem(nr:NETRESOURCE;node:TTreeNode):TTreeNode;   
          function   EnumNetWorkResource(lpnr:PNetResource;node:TTreeNode):Boolean;   
          procedure   ConnectResource(pnr:PNetResource);   
      end;   
    
  var   
      Form1:   TForm1;   
    
  implementation   
    
  {$R   *.DFM}   
    
  {   TForm1   }   
  function   GetLastErrorText:string;   
  var   
        dwSize:DWORD;   
        lpszTemp:LPSTR;   
  begin   
            dwSize:=512;   
            lpszTemp:=nil;   
            try   
                  GetMem(lpszTemp,dwSize);   
                  FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM   or   FORMAT_MESSAGE_ARGUMENT_ARRAY,   
                  nil,GetLastError,LANG_NEUTRAL,lpszTemp,dwSize,nil);   
            finally   
                          Result:=StrPas(lpszTemp);   
                          FreeMem(lpszTemp);   
            end;   
  end;   
    
  function   TForm1.EnumNetWorkResource(lpnr:PNetResource;node:TTreeNode):Boolean;   
  var   
  nr:NetResource;   
  hEnum:THandle;   
  lpnrLocal:   PNETRESOURCE;   
  cbBuffer:DWORD;   
  cEntries,dwEnumResult:DWORD;   
  i:Integer;   
  LocalNode:TTreeNode;   
  begin   
  Result:=False;   
  cbBuffer:=163840;   
  cEntries:=$ffffffff;   
  lpnrLocal:=nil;   
  if(WNetOpenEnum(RESOURCE_GLOBALNET,   
  RESOURCETYPE_ANY,   
        0,   
        lpnr,   
        hEnum)<>NO_ERROR)then   
        begin   
        ShowMessage('Open   enum   error,node='+lpnr^.lpRemoteName);   
        ShowMessage(GetLastErrorText);   
        Result:=False;   
        Exit;   
        end;   
  try   
        repeat   
  lpnrLocal:=PNetResource(GlobalAlloc(GPTR,cbBuffer));   
        dwEnumResult:=WNetEnumResource(hEnum,   
                cEntries,   
                        lpnrLocal,   
                        cbBuffer);   
                if(dwEnumResult=NO_ERROR)then   
                begin   
                        for   i:=0   to   cEntries-1   do   
                        begin   
                                nr:=(PNetResource(PChar(lpnrLocal)+sizeOf(NetResource)*i))^;   
                                LocalNode:=AddTreeItem(nr,node);   
                                if(RESOURCEUSAGE_CONTAINER=   
                                nr.dwUsage   and   RESOURCEUSAGE_CONTAINER)then   
                                        begin   
                                        if(not   EnumNetWorkResource(@nr,LocalNode))then   
                                        begin   
                                        ShowMessage('Error   enum,Parent='+lpnr^.lpRemoteName);   
  ShowMessage(GetLastErrorText);   
                                                end;   
                                        end;   
                                end;   
                        end;   
        until   (dwEnumResult=ERROR_NO_MORE_ITEMS);   
        if(dwEnumResult=ERROR_NO_MORE_ITEMS)then   
        Result:=True;   
  Except   
  GlobalFree(Cardinal(lpnrLocal));   
  WNetCloseEnum(hEnum);   
        Raise;   
        end;   
  GlobalFree(Cardinal(lpnrLocal));   
  WNetCloseEnum(hEnum);   
  end;   
    
  procedure   TForm1.Button1Click(Sender:   TObject);   
  begin   
  EnumNetWorkResource(nil,ResourceTree.Items[0]);   
  end;   
    
  function   TForm1.AddTreeItem(nr:   NETRESOURCE;   node:   TTreeNode):   TTreeNode;   
  var   
  pnr:PNetResource;   
  begin   
  GetMem(pnr,SizeOf(NetResource));   
  pnr^:=nr;   
  Result:=ResourceTree.Items.AddChildObject(node,nr.lpRemoteName,pnr);   
  if(nr.dwUsage=RESOURCEUSAGE_CONTAINER)then   
  Result.ImageIndex:=0   
  else   Result.ImageIndex:=1;   
  end;   
    
  procedure   TForm1.ResourceTreeChange(Sender:   TObject;   Node:   TTreeNode);   
  var   
  pnr:PNetResource;   
  begin   
  pnr:=PNetResource(Node.Data);   
  if(pnr=nil)then   Exit;   
  case   pnr^.dwScope   of   
  RESOURCE_CONNECTED:   
        lbScope.Caption:='Connetted';   
        RESOURCE_GLOBALNET:   
        lbScope.Caption:='GlobalNet';   
        RESOURCE_REMEMBERED:   
        lbScope.Caption:='Remembered';   
        else   
        lbScope.Caption:='else   scope:'+IntToStr(pnr^.dwScope);   
        end;   
    
    
    
  case   pnr^.dwType   of   
  RESOURCETYPE_DISK:   
        lbType.Caption:='Disk';   
        RESOURCETYPE_PRINT:   
        lbType.Caption:='Printer';   
        else   
        lbType.Caption:=IntToStr(pnr^.dwType);   
        end;   
    
  case   pnr^.dwDisplayType   of   
  RESOURCEDISPLAYTYPE_DOMAIN:   
        lbDisplayType.Caption:='Domain';   
        RESOURCEDISPLAYTYPE_GENERIC:   
        lbDisplayType.Caption:='Generic';   
        RESOURCEDISPLAYTYPE_SERVER:   
        lbDisplayType.Caption:='Server';   
        RESOURCEDISPLAYTYPE_SHARE:   
        lbDisplayType.Caption:='Shared';   
        else   
        lbDisplayType.Caption:='else   type:'+IntToStr(pnr^.dwDisplayType);   
        end;   
    
  case   pnr^.dwUsage   of   
  RESOURCEUSAGE_CONTAINER:   
        lbUsage.Caption:='Container';   
        RESOURCEUSAGE_CONNECTABLE:   
        lbUsage.Caption:='Connectable';   
        else   
        lbUsage.Caption:='else   Usage:'+IntToStr(pnr^.dwUsage);   
        end;   
    
  lbLocalName.Caption:=pnr^.lpLocalName;   
  lbRemoteName.Caption:=pnr^.lpRemoteName;   
  lbComment.Caption:=pnr^.lpComment;   
  lbProvider.Caption:=pnr^.lpProvider;   
    
  //ConnectResource(pnr);   
  end;   
    
  procedure   TForm1.ConnectResource(pnr:   PNetResource);   
  begin   
  if((pnr^.dwUsage   and   RESOURCEUSAGE_CONNECTABLE)   
  =RESOURCEUSAGE_CONNECTABLE)then   
        begin   
  {       if(WNetAddConnection2(pnr^,PChar(''),'wuwei',0)<>NO_ERROR)then   
        ShowMessage(GetLastErrorText);}   
  if(WNetAddConnection(pnr^.lpRemoteName,'','h:')<>NO_ERROR)then   
        ShowMessage(GetLastErrorText);   
        end;   
  end;   
    
  procedure   TForm1.ToolButton2Click(Sender:   TObject);   
  var   
  p:PNetResource;   
  begin   
  p:=PNetResource(ResourceTree.Selected.Data);   
  ConnectResource(p);   
  end;   
    
  end.