当前位置:首页 > 网络编程 > 软件语言 > DELPHI > 动态取得网络邻居的工作组和计算机名

动态取得网络邻居的工作组和计算机名

点击次数:51 次 发布日期:2008-11-09 08:39:43 作者:源代码网
源代码网推荐
广告载入中
如何在程序中动态取得Win95/98的网络邻居中的工作组及计算机名?
源代码网推荐 可参考下面代码,或许有所帮助:
源代码网推荐 procedure GetDomainList(TV:TTreeView);
源代码网推荐 var
源代码网推荐 a : Integer;
源代码网推荐 ErrCode : Integer;
源代码网推荐 NetRes : Array[0..1023] of TNetResource;
源代码网推荐 EnumHandle : THandle;
源代码网推荐 EnumEntries : DWord;
源代码网推荐 BufferSize : DWord;
源代码网推荐 s : string;
源代码网推荐 itm : TTreeNode;
源代码网推荐 begin
源代码网推荐 { Start here }
源代码网推荐 try
源代码网推荐 With NetRes[0] do begin
源代码网推荐 dwScope :=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_GLOBALNET,
源代码网推荐 RESOURCETYPE_ANY,
源代码网推荐 RESOURCEUSAGE_CONTAINER,
源代码网推荐 @NetRes[0],
源代码网推荐 EnumHandle
源代码网推荐 );
源代码网推荐 If ErrCode=NO_ERROR then begin
源代码网推荐 EnumEntries:=1;
源代码网推荐 BufferSize:=SizeOf(NetRes);
源代码网推荐 ErrCode:=WNetEnumResource(
源代码网推荐 EnumHandle,
源代码网推荐 EnumEntries,
源代码网推荐 @NetRes[0],
源代码网推荐 BufferSize
源代码网推荐 );
源代码网推荐 WNetCloseEnum(EnumHandle);
源代码网推荐 ErrCode:=WNetOpenEnum(
源代码网推荐 RESOURCE_GLOBALNET,
源代码网推荐 RESOURCETYPE_ANY,
源代码网推荐 RESOURCEUSAGE_CONTAINER,
源代码网推荐 @NetRes[0],
源代码网推荐 EnumHandle
源代码网推荐 );
源代码网推荐 EnumEntries:=1024;
源代码网推荐 BufferSize:=SizeOf(NetRes);
源代码网推荐 ErrCode:=WNetEnumResource(
源代码网推荐 EnumHandle,
源代码网推荐 EnumEntries,
源代码网推荐 @NetRes[0],
源代码网推荐 BufferSize
源代码网推荐 );
源代码网推荐 IF ErrCode=No_Error then with TV do try
源代码网推荐 a:=0;
源代码网推荐 Items.BeginUpDate;
源代码网推荐 Items.Clear;
源代码网推荐 Itm:=Items.Add(TV.Selected,string(NetRes[0].lpProvider));
源代码网推荐 Itm.ImageIndex:=0;
源代码网推荐 Itm.SelectedIndex:=0;
源代码网推荐 { get domains }
源代码网推荐 下面的一个单元定义了一个组件. TNetworkBrowser, 可以枚举hierachical树上所有
源代码网推荐 的网络资源. 实际上浏览是要花费很长时间的,这您可以通过在WINDOWS资源管理器
源代码网推荐 中打开"整个网络" 来比较一下. 如果你设置SCOPE属性 为nsContext , 你就可以看到
源代码网推荐 和网络邻居中一样的机器列表.
源代码网推荐 unit NetBrwsr;
源代码网推荐 interface
源代码网推荐 uses
源代码网推荐 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;


源代码网推荐 type
源代码网推荐 TNetScope = (nsConnected, nsGlobal, nsRemembered, nsContext);
源代码网推荐 TNetResourceType = (nrAny, nrDisk, nrPrint);
源代码网推荐 TNetDisplay = (ndDomain, ndGeneric, ndServer, ndShare, ndFile, ndGroup,
源代码网推荐 ndNetwork, ndRoot, ndShareAdmin, ndDirectory, ndTree, ndNDSContainer);
源代码网推荐 TNetUsage = set of (nuConnectable, nuContainer);
源代码网推荐 TNetworkItems = class;
源代码网推荐 TNetworkItem = class
源代码网推荐 private
源代码网推荐 FScope: TNetScope;
源代码网推荐 FResourceType: TNetResourceType;
源代码网推荐 FDisplay: TNetDisplay;
源代码网推荐 FUsage: TNetUsage;
源代码网推荐 FLocalName: string;
源代码网推荐 FRemoteName: string;
源代码网推荐 FComment: string;
源代码网推荐 FProvider: string;
源代码网推荐 FSubItems: TNetworkItems;
源代码网推荐 public
源代码网推荐 constructor 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 = class
源代码网推荐 private
源代码网推荐 FList: TList;
源代码网推荐 procedure SetItem(Index: Integer; Value: TNetworkItem);
源代码网推荐 function GetItem(Index: Integer): TNetworkItem;
源代码网推荐 function GetCount: Integer;
源代码网推荐 public
源代码网推荐 constructor Create;
源代码网推荐 destructor Destroy; override;
源代码网推荐 procedure Clear;
源代码网推荐 procedure Add(Item: TNetworkItem);
源代码网推荐 procedure Delete(Index: Integer);
源代码网推荐 property Items[Index: Integer]: TNetworkItem read GetItem write
源代码网推荐 SetItem; default;
源代码网推荐 property Count: Integer read GetCount;
源代码网推荐 end;
源代码网推荐 TNetworkBrowser = class(TComponent)
源代码网推荐 private
源代码网推荐 FItems: TNetworkItems;
源代码网推荐 FScope: TNetScope;
源代码网推荐 FResourceType: TNetResourceType;
源代码网推荐 FUsage: TNetUsage;
源代码网推荐 FActive: Boolean;
源代码网推荐 procedure Refresh;
源代码网推荐 procedure SetActive(Value: Boolean);
源代码网推荐 procedure SetScope(Value: TNetScope);
源代码网推荐 procedure SetResourceType(Value: TNetResourceType); 软件开发网 www.mscto.com
源代码网推荐 procedure SetUsage(Value: TNetUsage);
源代码网推荐 procedure EnumerateNet(NetItems: TNetworkItems; lpnr: PNetResource);
源代码网推荐 protected
源代码网推荐 public
源代码网推荐 constructor Create(AOwner: TComponent); override;
源代码网推荐 destructor Destroy; override;
源代码网推荐 procedure Open;
源代码网推荐 procedure Close;
源代码网推荐 property Items: TNetworkItems read FItems;
源代码网推荐 published
源代码网推荐 property Scope: TNetScope read FScope write SetScope default nsGlobal;
源代码网推荐 property ResourceType: TNetResourceType read FResourceType
源代码网推荐 write SetResourceType default nrAny;
源代码网推荐 property Usage: TNetUsage read FUsage write SetUsage default [];
源代码网推荐 property Active: Boolean read FActive write SetActive default False;
源代码网推荐 end;
源代码网推荐 implementation
源代码网推荐 type
源代码网推荐 PNetResourceArray = ^TNetResourceArray;
源代码网推荐 TNetResourceArray = array[0..0] of TNetResource;
源代码网推荐 { TNetworkItem }
源代码网推荐 constructor TNetworkItem.Create;
源代码网推荐 begin
源代码网推荐 inherited;
源代码网推荐 FSubItems := TNetworkItems.Create;
源代码网推荐 end;
源代码网推荐 destructor TNetworkItem.Destroy;
源代码网推荐 begin
源代码网推荐 if FSubItems <> nil then
源代码网推荐 FSubItems.Free;
源代码网推荐 inherited;
源代码网推荐 end;
源代码网推荐 { TNetworkItems }
源代码网推荐 constructor TNetworkItems.Create;
源代码网推荐 begin
源代码网推荐 inherited;
源代码网推荐 FList := TList.Create;
源代码网推荐 end;
源代码网推荐 destructor TNetworkItems.Destroy;
源代码网推荐 begin
源代码网推荐 Clear;
源代码网推荐 if FList <> nil then
源代码网推荐 FList.Free;
源代码网推荐 inherited;
源代码网推荐 end;
源代码网推荐 procedure TNetworkItems.SetItem(Index: Integer; Value: TNetworkItem);
源代码网推荐 begin
源代码网推荐 if (FList.Items[Index] <> nil) and (FList.Items[Index] <> Value) then
源代码网推荐 TNetworkItem(FList.Items[Index]).Free;
源代码网推荐 FList.Items[Index] := Value;
源代码网推荐 end;
源代码网推荐 function TNetworkItems.GetItem(Index: Integer): TNetworkItem;
源代码网推荐 begin
源代码网推荐 Result := TNetworkItem(FList.Items[Index]);
源代码网推荐 end;
源代码网推荐 procedure TNetworkItems.Clear;
源代码网推荐 begin
源代码网推荐 while Count > 0 do
源代码网推荐 Delete(0);
源代码网推荐 end;
源代码网推荐 procedure TNetworkItems.Add(Item: TNetworkItem);
源代码网推荐 begin
源代码网推荐 FList.Add(Item);
源代码网推荐 end;
源代码网推荐 procedure TNetworkItems.Delete(Index: Integer);
源代码网推荐 begin
源代码网推荐 if FList.Items[Index] <> nil then
源代码网推荐 TNetworkItem(FList.Items[Index]).Free;
源代码网推荐 FList.Delete(Index);
源代码网推荐 end;
源代码网推荐 function TNetworkItems.GetCount: Integer;
源代码网推荐 begin
源代码网推荐 if FList <> nil then
源代码网推荐 Result := FList.Count
源代码网推荐 else
源代码网推荐 Result := 0;
源代码网推荐 end;
源代码网推荐 { TNetworkBrowser }
源代码网推荐 constructor TNetworkBrowser.Create(AOwner: TComponent);
源代码网推荐 begin
源代码网推荐 inherited Create(AOwner);
源代码网推荐 FItems := TNetworkItems.Create;
源代码网推荐 FScope := nsGlobal;
源代码网推荐 FResourceType := nrAny;
源代码网推荐 FUsage := [];
源代码网推荐 end;
源代码网推荐 destructor TNetworkBrowser.Destroy;
源代码网推荐 begin
源代码网推荐 if FItems <> nil then
源代码网推荐 FItems.Free;
源代码网推荐 inherited;
源代码网推荐 end;
源代码网推荐 procedure TNetworkBrowser.EnumerateNet(NetItems: TNetworkItems; lpnr:
源代码网推荐 PNetResource);
源代码网推荐 var
源代码网推荐 dwResult, dwResultEnum: Integer;
源代码网推荐 hEnum: THandle;
源代码网推荐 cbBuffer, cEntries, i: Integer;
源代码网推荐 nrArray: PNetResourceArray;
源代码网推荐 NewItem: TNetworkItem;
源代码网推荐 dwScope, dwType, dwUsage: Integer;
源代码网推荐 begin
源代码网推荐 cbBuffer := 16384;
源代码网推荐 cEntries := $FFFFFFFF;
源代码网推荐 case FScope of 软件开发网 www.mscto.com
源代码网推荐 nsConnected: dwScope := RESOURCE_CONNECTED;
源代码网推荐 nsGlobal: dwScope := RESOURCE_GLOBALNET;
源代码网推荐 nsRemembered: dwScope := RESOURCE_REMEMBERED;
源代码网推荐 nsContext: dwScope := RESOURCE_CONTEXT;
源代码网推荐 else
源代码网推荐 dwScope := RESOURCE_GLOBALNET;
源代码网推荐 end;
源代码网推荐 case FResourceType of
源代码网推荐 nrAny: dwType := RESOURCETYPE_ANY;
源代码网推荐 nrDisk: dwType := RESOURCETYPE_DISK;
源代码网推荐 nrPrint: dwType := RESOURCETYPE_PRINT;
源代码网推荐 else
源代码网推荐 dwType := RESOURCETYPE_ANY;
源代码网推荐 end;
源代码网推荐 dwUsage := 0;
源代码网推荐 if nuConnectable in FUsage then
源代码网推荐 dwUsage := dwUsage or RESOURCEUSAGE_CONNECTABLE;
源代码网推荐 if nuContainer in FUsage then
源代码网推荐 dwUsage := dwUsage or RESOURCEUSAGE_CONTAINER;
源代码网推荐 dwResult := WNetOpenEnum(dwScope, dwType, dwUsage, lpnr, hEnum);
源代码网推荐 if dwResult <> NO_ERROR then Exit;
源代码网推荐 GetMem(nrArray, cbBuffer);
源代码网推荐 repeat
源代码网推荐 dwResultEnum := WNetEnumResource(hEnum, cEntries, nrArray, cbBuffer);
源代码网推荐 if dwResultEnum = NO_ERROR then
源代码网推荐 for i := 0 to cEntries-1 do
源代码网推荐 begin
源代码网推荐 NewItem := TNetworkItem.Create;


源代码网推荐 case nrArray[i].dwScope of
源代码网推荐 RESOURCE_CONNECTED: NewItem.FScope := nsConnected;
源代码网推荐 RESOURCE_GLOBALNET: NewItem.FScope := nsGlobal;
源代码网推荐 RESOURCE_REMEMBERED: NewItem.FScope := nsRemembered;
源代码网推荐 RESOURCE_CONTEXT: NewItem.FScope := nsContext;
源代码网推荐 else
源代码网推荐 NewItem.FScope := nsGlobal;
源代码网推荐 end;
源代码网推荐 case nrArray[i].dwType of
源代码网推荐 RESOURCETYPE_ANY: NewItem.FResourceType := nrAny;
源代码网推荐 RESOURCETYPE_DISK: NewItem.FResourceType := nrDisk;
源代码网推荐 RESOURCETYPE_PRINT: NewItem.FResourceType := nrPrint;
源代码网推荐 else
源代码网推荐 NewItem.FResourceType := nrAny;
源代码网推荐 end;
源代码网推荐 case nrArray[i].dwDisplayType of
源代码网推荐 RESOURCEDISPLAYTYPE_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;
源代码网推荐 else
源代码网推荐 NewItem.FDisplay := ndGeneric;
源代码网推荐 end;
源代码网推荐 NewItem.FUsage := [];
源代码网推荐 if nrArray[i].dwUsage and RESOURCEUSAGE_CONNECTABLE <> 0 then
源代码网推荐 Include(NewItem.FUsage, nuConnectable);
源代码网推荐 if nrArray[i].dwUsage and RESOURCEUSAGE_CONTAINER <> 0 then
源代码网推荐 Include(NewItem.FUsage, nuContainer);
源代码网推荐 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 container, call recursively
源代码网推荐 if (nuContainer in NewItem.FUsage) and (FScope <> nsContext) then
源代码网推荐 EnumerateNet(NewItem.FSubItems, @nrArray[i])
源代码网推荐 end;
源代码网推荐 until dwResultEnum = ERROR_NO_MORE_ITEMS;
源代码网推荐 FreeMem(nrArray);
源代码网推荐 WNetCloseEnum(hEnum);
源代码网推荐 end;
源代码网推荐 procedure TNetworkBrowser.Refresh;
源代码网推荐 begin
源代码网推荐 FItems.Clear;
源代码网推荐 if FActive then
源代码网推荐 EnumerateNet(FItems, nil);
源代码网推荐 end;
源代码网推荐 procedure TNetworkBrowser.SetActive(Value: Boolean);
源代码网推荐 begin
源代码网推荐 if Value <> FActive then
源代码网推荐 begin
源代码网推荐 FActive := Value;
源代码网推荐 Refresh;
源代码网推荐 end;
源代码网推荐 end;
源代码网推荐 procedure TNetworkBrowser.SetScope(Value: TNetScope);
源代码网推荐 begin
源代码网推荐 if Value <> FScope then
源代码网推荐 begin
源代码网推荐 FScope := Value;
源代码网推荐 Refresh;
源代码网推荐 end;
源代码网推荐 end;
源代码网推荐 procedure TNetworkBrowser.SetResourceType(Value: TNetResourceType);
源代码网推荐 begin
源代码网推荐 if Value <> FResourceType then
源代码网推荐 begin
源代码网推荐 FResourceType := Value;
源代码网推荐 Refresh;
源代码网推荐 end;
源代码网推荐 end;
源代码网推荐 procedure TNetworkBrowser.SetUsage(Value: TNetUsage);
源代码网推荐 begin
源代码网推荐 if Value <> FUsage then
源代码网推荐 begin
源代码网推荐 FUsage := Value;
源代码网推荐 Refresh; 软件开发网 www.mscto.com
源代码网推荐 end;
源代码网推荐 end;
源代码网推荐 procedure TNetworkBrowser.Open;
源代码网推荐 begin
源代码网推荐 Active := True;
源代码网推荐 end;
源代码网推荐 procedure TNetworkBrowser.Close;
源代码网推荐 begin
源代码网推荐 Active := False;
源代码网推荐 end;
源代码网推荐 end.


源代码网推荐

源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华