假设我在本机了。要查找同本机相连的网络中,是否存在计算机A?

解决方案 »

  1.   

    在程序中动态取得网络邻居中工作组及计算机名
    procedure GetDomainList(TV:TTreeView);vara : Integer;ErrCode : Integer;NetRes : Array[0..1023] of TNetResource;EnumHandle : THandle;EnumEntries : DWord;BufferSize : DWord;s : string;itm : TTreeNode;begin{ Start here }tryWith NetRes[0] do begindwScope :=RESOURCE_GLOBALNET;dwType :=RESOURCETYPE_ANY;dwDisplayType :=RESOURCEDISPLAYTYPE_DOMAIN;dwUsage :=RESOURCEUSAGE_CONTAINER;lpLocalName :=NIL;lpRemoteName :=NIL;lpComment :=NIL;lpProvider :=NIL;end;{ get net root }ErrCode:=WNetOpenEnum(RESOURCE_GLOBALNETRESOURCETYPE_ANY
    RESOURCEUSAGE_CONTAINER@NetRes[0]EnumHandle);If ErrCode=NO_ERROR thenbeginEnumEntries:=1;BufferSize:=SizeOf(NetRes);ErrCode:=WNetEnumResource(EnumHandleEnumEntries@NetRes[0]BufferSize);WNetCloseEnum(EnumHandle);ErrCode:=WNetOpenEnum(RESOURCE_GLOBALNETRESOURCETYPE_ANY
    RESOURCEUSAGE_CONTAINER@NetRes[0]EnumHandle);EnumEntries:=1024;BufferSize:=SizeOf(NetRes);ErrCode:=WNetEnumResource(EnumHandleEnumEntries@NetRes[0]BufferSize);IF ErrCode=No_Error then with TV do trya:=0;Items.BeginUpDate;Items.Clear;Itm:=Items.Add(TV.Selectedstring(NetRes[0].lpProvider));Itm.ImageIndex:=0;Itm.SelectedIndex:=0;
    { get domains }
      

  2.   

    下面的一个单元定义了一个组件. TNetworkBrowser可以枚举hierachical树上所有的网络资源. 实际上浏览是要花费很长时间的这您可以通过在WINDOWS资源管理器中打开"整个网络" 来比较一下. 如果你设置SCOPE属性 为nsContext你就可以看到和网络邻居中一样的机器列表.
    unit NetBrwsr;
    interface
    usesWindowsMessagesSysUtilsClassesGraphicsControlsFormsDialogs;
    typeTNetScope = (nsConnectednsGlobalnsRememberednsContext);TNetResourceType = (nrAnynrDisknrPrint);TNetDisplay = (ndDomainndGenericndServerndSharendFilendGroup
    ndNetworkndRootndShareAdminndDirectoryndTreendNDSContainer);TNetUsage = set of (nuConnectablenuContainer);
    TNetworkItems = class;
    TNetworkItem = classprivateFScope: TNetScope;FResourceType: TNetResourceType;FDisplay: TNetDisplay;FUsage: TNetUsage;FLocalName: string;FRemoteName: string;FComment: string;FProvider: string;FSubItems: TNetworkItems;publicconstructor Create;destructor Destroy; override;property Scope: TNetScope read FScope;property ResourceType: TNetResourceType read FResourceType;property Display: TNetDisplay read FDisplay;property Usage: TNetUsage read FUsage;property LocalName: string read FLocalName;property RemoteName: string read FRemoteName;property Comment: string read FComment;property Provider: string read FProvider;property SubItems: TNetworkItems read FSubItems;end;
    TNetworkItems = classprivateFList: TList;procedure SetItem(Index: Integer; Value: TNetworkItem);function GetItem(Index: Integer): TNetworkItem;function GetCount: Integer;publicconstructor Create;destructor Destroy; override;procedure Clear;procedure Add(Item: TNetworkItem);procedure Delete(Index: Integer);property Items[Index: Integer]: TNetworkItem read GetItem writeSetItem; default;property Count: Integer read GetCount;end;
    TNetworkBrowser = class(TComponent)privateFItems: TNetworkItems;FScope: TNetScope;FResourceType: TNetResourceType;FUsage: TNetUsage;FActive: Boolean;procedure Refresh;procedure SetActive(Value: Boolean);procedure SetScope(Value: TNetScope);procedure SetResourceType(Value: TNetResourceType);procedure SetUsage(Value: TNetUsage);procedure EnumerateNet(NetItems: TNetworkItems; lpnr: PNetResource);protectedpublicconstructor Create(AOwner: TComponent); override;destructor Destroy; override;procedure Open;procedure Close;property Items: TNetworkItems read FItems;publishedproperty Scope: TNetScope read FScope write SetScope default nsGlobal;property ResourceType: TNetResourceType read FResourceTypewrite SetResourceType default nrAny;property Usage: TNetUsage read FUsage write SetUsage default [];property Active: Boolean read FActive write SetActive default False;end;
    implementation
    typePNetResourceArray = ^TNetResourceArray;TNetResourceArray = array[0..0] of TNetResource;
    { TNetworkItem }
    constructor TNetworkItem.Create;begininherited;FSubItems := TNetworkItems.Create;end;
    destructor TNetworkItem.Destroy;beginif FSubItems <> nil thenFSubItems.Free;inherited;end;
    { TNetworkItems }
    constructor TNetworkItems.Create;begininherited;FList := TList.Create;end;
    destructor TNetworkItems.Destroy;beginClear;if FList <> nil thenFList.Free;inherited;end;
    procedure TNetworkItems.SetItem(Index: Integer; Value: TNetworkItem);beginif (FList.Items[Index] <> nil) and (FList.Items[Index] <> Value) thenTNetworkItem(FList.Items[Index]).Free;FList.Items[Index] := Value;end;
    function TNetworkItems.GetItem(Index: Integer): TNetworkItem;beginResult := TNetworkItem(FList.Items[Index]);end;
    procedure TNetworkItems.Clear;beginwhile Count > 0 doDelete(0);end;
    procedure TNetworkItems.Add(Item: TNetworkItem);beginFList.Add(Item);end;
    procedure TNetworkItems.Delete(Index: Integer);beginif FList.Items[Index] <> nil thenTNetworkItem(FList.Items[Index]).Free;FList.Delete(Index);end;
    function TNetworkItems.GetCount: Integer;beginif FList <> nil thenResult := FList.CountelseResult := 0;end;
    { TNetworkBrowser }
      

  3.   

    constructor TNetworkBrowser.Create(AOwner: TComponent);begininherited Create(AOwner);FItems := TNetworkItems.Create;FScope := nsGlobal;FResourceType := nrAny;FUsage := [];end;
    destructor TNetworkBrowser.Destroy;beginif FItems <> nil thenFItems.Free;inherited;end;
    procedure TNetworkBrowser.EnumerateNet(NetItems: TNetworkItems; lpnr:PNetResource);vardwResultdwResultEnum: Integer;hEnum: THandle;cbBuffercEntriesi: Integer;nrArray: PNetResourceArray;NewItem: TNetworkItem;dwScopedwTypedwUsage: Integer;begincbBuffer := 16384;cEntries := $FFFFFFFF;
    case FScope ofnsConnected: dwScope := RESOURCE_CONNECTED;nsGlobal: dwScope := RESOURCE_GLOBALNET;nsRemembered: dwScope := RESOURCE_REMEMBERED;nsContext: dwScope := RESOURCE_CONTEXT;elsedwScope := RESOURCE_GLOBALNET;end;case FResourceType ofnrAny: dwType := RESOURCETYPE_ANY;nrDisk: dwType := RESOURCETYPE_DISK;nrPrint: dwType := RESOURCETYPE_PRINT;elsedwType := RESOURCETYPE_ANY;end;dwUsage := 0;if nuConnectable in FUsage thendwUsage := dwUsage or RESOURCEUSAGE_CONNECTABLE;if nuContainer in FUsage thendwUsage := dwUsage or RESOURCEUSAGE_CONTAINER;
    dwResult := WNetOpenEnum(dwScopedwTypedwUsagelpnrhEnum);if dwResult <> NO_ERROR then Exit;
    GetMem(nrArraycbBuffer);repeatdwResultEnum := WNetEnumResource(hEnumcEntriesnrArraycbBuffer);if dwResultEnum = NO_ERROR thenfor i := 0 to cEntries-1 dobeginNewItem := TNetworkItem.Create;case nrArray[i].dwScope ofRESOURCE_CONNECTED: NewItem.FScope := nsConnected;RESOURCE_GLOBALNET: NewItem.FScope := nsGlobal;RESOURCE_REMEMBERED: NewItem.FScope := nsRemembered;RESOURCE_CONTEXT: NewItem.FScope := nsContext;elseNewItem.FScope := nsGlobal;end;case nrArray[i].dwType ofRESOURCETYPE_ANY: NewItem.FResourceType := nrAny;RESOURCETYPE_DISK: NewItem.FResourceType := nrDisk;RESOURCETYPE_PRINT: NewItem.FResourceType := nrPrint;elseNewItem.FResourceType := nrAny;end;case nrArray[i].dwDisplayType ofRESOURCEDISPLAYTYPE_GENERIC: NewItem.FDisplay := ndGeneric;RESOURCEDISPLAYTYPE_DOMAIN: NewItem.FDisplay := ndDomain;RESOURCEDISPLAYTYPE_SERVER: NewItem.FDisplay := ndServer;RESOURCEDISPLAYTYPE_SHARE: NewItem.FDisplay := ndShare;RESOURCEDISPLAYTYPE_FILE: NewItem.FDisplay := ndFile;RESOURCEDISPLAYTYPE_GROUP: NewItem.FDisplay := ndGroup;RESOURCEDISPLAYTYPE_NETWORK: NewItem.FDisplay := ndNetwork;RESOURCEDISPLAYTYPE_ROOT: NewItem.FDisplay := ndRoot;RESOURCEDISPLAYTYPE_SHAREADMIN: NewItem.FDisplay :=ndShareAdmin;RESOURCEDISPLAYTYPE_DIRECTORY: NewItem.FDisplay :=ndDirectory;RESOURCEDISPLAYTYPE_TREE: NewItem.FDisplay := ndTree;RESOURCEDISPLAYTYPE_NDSCONTAINER: NewItem.FDisplay :=ndNDSContainer;elseNewItem.FDisplay := ndGeneric;end;NewItem.FUsage := [];if nrArray[i].dwUsage and RESOURCEUSAGE_CONNECTABLE <> 0 thenInclude(NewItem.FUsagenuConnectable);if nrArray[i].dwUsage and RESOURCEUSAGE_CONTAINER <> 0 thenInclude(NewItem.FUsagenuContainer);NewItem.FLocalName := StrPas(nrArray[i].lpLocalName);NewItem.FRemoteName := StrPas(nrArray[i].lpRemoteName);NewItem.FComment := StrPas(nrArray[i].lpComment);NewItem.FProvider := StrPas(nrArray[i].lpProvider);NetItems.Add(NewItem);// if containercall recursivelyif (nuContainer in NewItem.FUsage) and (FScope <> nsContext) thenEnumerateNet(NewItem.FSubItems@nrArray[i])end;until dwResultEnum = ERROR_NO_MORE_ITEMS;
    FreeMem(nrArray);WNetCloseEnum(hEnum);end;
    procedure TNetworkBrowser.Refresh;beginFItems.Clear;if FActive thenEnumerateNet(FItemsnil);end;
    procedure TNetworkBrowser.SetActive(Value: Boolean);beginif Value <> FActive thenbeginFActive := Value;Refresh;end;end;
    procedure TNetworkBrowser.SetScope(Value: TNetScope);beginif Value <> FScope thenbeginFScope := Value;Refresh;end;end;
    procedure TNetworkBrowser.SetResourceType(Value: TNetResourceType);beginif Value <> FResourceType thenbeginFResourceType := Value;Refresh;end;end;
    procedure TNetworkBrowser.SetUsage(Value: TNetUsage);beginif Value <> FUsage thenbeginFUsage := Value;Refresh;end;end;
    procedure TNetworkBrowser.Open;beginActive := True;end;
    procedure TNetworkBrowser.Close;beginActive := False;end;
      

  4.   

    最好给出一个实例来。email:[email protected]