unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, CommCtrl;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure TreeView1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure GetServerList(TV:TTreeView; Node:TTreeNode);
var
a: Integer;
ErrCode: Integer;
NetRes: array[0..1023] of TNetResource;
EnumHandle: THandle;
EnumEntries: DWord;
BufferSize: DWord;
s: string;
itm: TTreeNode;
begin
if not Node.HasChildren then
try
Screen.Cursor := crHourglass;
with NetRes[0] do
begin
dwScope := RESOURCE_GLOBALNET;
dwType := RESOURCETYPE_ANY;
dwDisplayType := RESOURCEDISPLAYTYPE_generic;
dwUsage := RESOURCEUSAGE_CONTAINER;
lpLocalName := NIL;
lpRemoteName := pChar(Tv.Selected.Text);
lpComment := NIL;
lpProvider := NIL;
end;
ErrCode := WNetOpenEnum(
RESOURCE_GLOBALNET,
RESOURCETYPE_ANY,
RESOURCEUSAGE_CONTAINER,
@NetRes[0],
EnumHandle
);
if ErrCode = NO_ERROR then
begin
EnumEntries := 1023;
BufferSize := SizeOf(NetRes);
ErrCode := WNetEnumResource(
EnumHandle,
EnumEntries,
@NetRes[0],
BufferSize
);
if ErrCode = No_Error then
with TV do
try
a:=0;
Items.BeginUpdate;
while a < enumEntries do
with NetRes[a] do
begin
s:=lowercase(lpRemoteName);
Delete(s,1,2);
itm := Items.AddChild(node,s);
itm.selectedIndex := 2;
itm.imageindex := 2;
inc(a);
end;
finally
Node.expand(false);
Items.EndUpdate;
end;
end;
finally
Screen.Cursor := crDefault;
WNetCloseEnum(EnumHandle);
end;
end;
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
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;
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;
while a < enumEntries do
with NetRes[a] do
begin
s := lpRemoteName;
Itm := Items.AddChild(Items[0], S);
Itm.ImageIndex := 1;
Itm.SelectedIndex := 1;
inc(a);
end;
finally
Items.EndUpdate;
end;
end;
finally
WNetCloseEnum(EnumHandle);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
GetDomainList(TreeView1);
end;
procedure TForm1.TreeView1Click(Sender: TObject);
begin
if TreeView1.Selected <> nil then
if TreeView1.Selected.level = 1 then
GetServerList(TreeView1, TreeView1.Selected);
end;
procedure SetNodeState(Node: TTreeNode; Flags: Integer);
var
TVItem: TTVItem;
begin
if not Assigned(Node) then Exit;
with TVItem do
begin
mask := TVIF_STATE or TVIF_HANDLE;
hItem := Node.ItemId;
stateMask := TVIS_BOLD or TVIS_CUT;
state := Flags;
TreeView_SetItem(Node.Handle, TVItem);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// root ³ëµå¸¦ º¼µå·Î...
SetNodeState(TreeView1.Items[0], TVIS_BOLD);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
// root ³ëµå¸¦ Àü»óÀ¸·Î...
SetNodeState(TreeView1.Items[0], 0);
end;
end. |
|