Q&A

  • 영대님.. NT에서 네트워크에 연결된 컴퓨터 아는법
제목에 영대님을 지목해서 적은건 죄송합니다.

얼마전에도 질문을 했는데 아무도 대답을 안해주셔서..

영대님에게 질문을 합니다.



영대님이 올리신 네트워크에 연결된 컴퓨터명 알아내는 프로그램을

유용하게 사용하고 있습니다.

그 프로그램은 win98에서는 잘 동작을 하지만

Win NT 에서는

ServerName ='';

제대로 동작하지 않습니다.



NT에서 전체네트워크를 구하려면 어떻게 해야 하나요?



1  COMMENTS
  • Profile
    김영대 1999.11.10 01:33
    김종호 wrote:

    > 제목에 영대님을 지목해서 적은건 죄송합니다.

    > 얼마전에도 질문을 했는데 아무도 대답을 안해주셔서..

    > 영대님에게 질문을 합니다.

    >

    > 영대님이 올리신 네트워크에 연결된 컴퓨터명 알아내는 프로그램을

    > 유용하게 사용하고 있습니다.

    > 그 프로그램은 win98에서는 잘 동작을 하지만

    > Win NT 에서는

    > ServerName ='';

    > 제대로 동작하지 않습니다.

    >

    > NT에서 전체네트워크를 구하려면 어떻게 해야 하나요?



    특정인을 지정하지 마세용~

    부담됩니다



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, ComCtrls;



    type

    TForm1 = class(TForm)

    TreeView1: TTreeView;

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

    procedure TreeView1Click(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.Button1Click(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;



    end.