LAN

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
      IdMessageClient, IdSMTP, StdCtrls;type
    TNetResourceArray=^TNetResource;
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        Memo1: TMemo;
        Label1: TLabel;
        procedure Button1Click(Sender: TObject);  private
        { Private declarations }
      public
        { Public declarations }  end;var
      Form1: TForm1;implementation{$R *.dfm}Function GetUserResource( UserName : string ; var List : TStringList ) : Boolean;
    Var
      NetResource1 : TNetResource;
      Buf1 : Pointer;
      Count,BufSize,Res : DWord; 
      Ind1 : Integer;
      lphEnum1 : THandle;
      Temp1 : TNetResourceArray; 
    Begin 
      Result := False; 
      List.Clear; 
      FillChar(NetResource1, SizeOf(NetResource), 0);
      NetResource1.lpRemoteName := @UserName[1];
      Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY,RESOURCEUSAGE_CONNECTABLE, @NetResource1,lphEnum1);If Res <> NO_ERROR Then exit;
      While True Do
      Begin 
        Count := $FFFFFFFF;
        BufSize := 8192;
        GetMem(Buf1, BufSize);
        Res := WNetEnumResource(lphEnum1, Count, Pointer(Buf1), BufSize);  If Res = ERROR_NO_MORE_ITEMS Then break;
      If (Res <> NO_ERROR) then Exit;
        Temp1 := TNetResourceArray(Buf1);
        For Ind1 := 0 to Count - 1 do
        Begin 
        List.Add(Temp1^.lpRemoteName);
        Inc(Temp1);
        End; 
    End; 
    Res := WNetCloseEnum(lphEnum1);
    If Res <> NO_ERROR Then exit;
      Result := True; 
      FreeMem(Buf1); 
    End;procedure TForm1.Button1Click(Sender: TObject);
    var 
      List1:TstringList; 
      i:integer;
    begin
     try 
      List1:=TstringList.Create;
      if GetUserResource(edit1.text,List1) then
        if List1.count=0 then
          begin
            showmessage(edit1.text+'不在局域网上或没有共享资源!');
          end 
      else
        memo1.Lines.Add (edit1.text+'下共享了如下资源');
        for i:=0 to List1.Count-1  do
          begin 
            Memo1.lines.Add (List1.strings[i]); 
          end; 
    finally 
      List1:=TstringList.Create;
    end;end;end.
    用来获取指定计算机
      

  2.   

    有没有更简单的方法?
    或可通过SHELLTREEVIEW来解决?