Q&A

  • WIndows 네트웍환경과 같은 화면은?
또 질문이네요...쩝..

윈도 의 네트웍환경과 같은 창을 만들려면 어떻게 해야하죠?

도메인 쫙 나오고 클릭하면 도메인에 소속된 컴퓨터이름 쫙

나오고 하는거 말입니다..

너무 궁금합니다...소스라도....

그럼 이만..

3  COMMENTS
  • Profile
    김영대 1999.07.21 20:26
    이주흥 께서 말씀하시기를...

    > 또 질문이네요...쩝..

    > 윈도 의 네트웍환경과 같은 창을 만들려면 어떻게 해야하죠?

    > 도메인 쫙 나오고 클릭하면 도메인에 소속된 컴퓨터이름 쫙

    > 나오고 하는거 말입니다..

    > 너무 궁금합니다...소스라도....

    > 그럼 이만..



    전에 올렸던 내용인데 한번만 검색해 보시지...

    다시 올려드립니다



    // 원도우즈 네트워크 환경의 컴퓨터 리스트 구하기 예제 소스

    unit Unit1;



    interface



    uses

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

    StdCtrls;



    type

    TForm1 = class(TForm)

    LB_UserList: TListBox;

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    ServerName: String;

    function GetNetworkUserName: Boolean;

    end;



    PnetResourceArr = ^TNetResource;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    function TForm1.GetNetworkUserName: Boolean;

    var

    NetResource: TNetResource;

    Buf:Pointer;

    Count, BufSize, Res: DWORD;

    i: Integer;

    lphEnum: THandle;

    p: PnetResourceArr;

    begin

    GetNetworkUserName := False;

    LB_UserList.Clear;

    GetMem(Buf, 8192);

    try

    FillChar(NetResource, SizeOf(NetResource), 0);

    NetResource.lpRemoteName := PChar(ServerName);

    NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;

    NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;

    NetResource.dwScope := RESOURCETYPE_DISK;

    Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER,

    @NetResource,lphEnum);

    if Res <> 0 then

    System.Exit;

    while true do

    begin

    Count := -1;

    BufSize := 8192;

    Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);

    if Res = ERROR_NO_MORE_ITEMS then

    System.Exit;

    if (Res <> 0) then

    System.Exit;

    p := PNetResourceArr(Buf);

    for i := 0 to Count - 1 do

    begin

    LB_UserList.Items.Add(p^.lpRemoteName + 2);

    Inc(p);

    end;

    end;

    Res := WNetCloseEnum(lphEnum);

    If Res <> 0 then

    raise Exception(Res);

    finally

    FreeMem(Buf);

    GetNetworkUserName := True;

    end;

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    // 네트워크 환경의 작업그룹명이 '' 이면 네트워크 환경의 작업그룹명들을 읽어옴

    ServerName := '전산운영팀'; // 네트워크 환경의 작업그룹명

    if GetNetworkUserName then

    Showmessage('총 '+IntToStr(LB_UserList.Items.Count)+' 개의 개체가 있습니다')

    else

    Showmessage('정보를 얻지 못했습니다');

    end;



    end.



  • Profile
    이주흥 1999.07.21 20:44
    감사합니다...검색해봐도 없던데...쩝..

    그건 그렇고 김영대님의 소스에는 작업그룹을 상수로 정해주셨는데

    제가 바라는건 대형네트웍에서 여러개의 도메인이 있을때

    모든 작업그룹을 읽어와서 작업그룹들을 트리뷰에 보여주고

    각각의 작업그룹들을 확장하면 밑에 딸린 컴을 볼수 있게 되는 겁니다.

    그것도 알고계시죠?

    그럼 이만..

  • Profile
    김영대 1999.07.21 21:16
    이주흥 께서 말씀하시기를...

    > 감사합니다...검색해봐도 없던데...쩝..

    > 그건 그렇고 김영대님의 소스에는 작업그룹을 상수로 정해주셨는데

    > 제가 바라는건 대형네트웍에서 여러개의 도메인이 있을때

    > 모든 작업그룹을 읽어와서 작업그룹들을 트리뷰에 보여주고

    > 각각의 작업그룹들을 확장하면 밑에 딸린 컴을 볼수 있게 되는 겁니다.

    > 그것도 알고계시죠?

    > 그럼 이만..



    ServerName := '';

    으로 해놓으시면 그룹명이 올라옵니다



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    // 네트워크 환경의 작업그룹명이 '' 이면 네트워크 환경의 작업그룹명들을 읽어옴

    ServerName := '전산운영팀'; // 네트워크 환경의 작업그룹명

    if GetNetworkUserName then

    Showmessage('총 '+IntToStr(LB_UserList.Items.Count)+' 개의 개체가 있습니다')

    else

    Showmessage('정보를 얻지 못했습니다');

    end;