procedure TfrmMain.btnRunClick(Sender: TObject);
begin
TreeView1.Items.Clear;
GetDomainList(TreeView1);
end;
procedure TfrmMain.btnExitClick(Sender: TObject);
begin
frmMain.Close;
end;
//得到网上邻居主机列表
procedure GetDomainList(Tree:TTreeView);
var
i:Integer;
ErrCode:Integer;
NetRes:Array[0..1023] of TNetResource;
EnumHandle:THandle;
EnumEntries:DWord;
BufferSize:DWord;
begin
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);
If ErrCode=NO_ERROR then
begin
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
for i:=0 to 1024 do
begin
if(NetRes[i].lpProvider=nil) then
begin
showmessage('网络上共有'+inttostr(i)+'个对象。');
break;
end
else
with Tree do
begin
Items.Add(Tree.Selected,'第'+inttostr(i+1)+'个对象');
Items.Add(Tree.Selected,'服务提供商:'+string(NetRes[i].lpProvider));
Items.Add(Tree.Selected,'本机名:'+string(NetRes[i].lpLocalName));
Items.Add(Tree.Selected,'远程机名或工作组名:'+string(NetRes[i].lpRemoteName));
Items.Add(Tree.Selected,'评注:'+string(NetRes[i].lpComment));
Items.Add(Tree.Selected,'-------');
end;
end;
end;
end;
except
showmessage('网络邻居上没有工作组或主机');
end;
end;