动态取得网络邻居的工作组和计算机名
点击次数:51 次 发布日期:2008-11-09 08:39:43 作者:源代码网
|
源代码网推荐 可参考下面代码,或许有所帮助: 源代码网推荐 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. 源代码网推荐 源代码网供稿. |
