Q&A

  • 컴퓨터 그룹 목록 구하기
도와주세요

델파이 헬퍼의 묻고 답하기 에서

렌으로 연결된 컴퓨터의 이름을 알 수 있는

소스를 구하였습니다.(김대영님....)

그런데 컴퓨터 그룹을 직접 입력하여야 합니다.

컴퓨터 그룹만을 리스트로 만들수는 없는 것입니까

가능하다면 가르쳐 주십시요.

부탁합니다.

1  COMMENTS
  • Profile
    김영대 1999.05.26 18:33
    강경중 wrote:

    > 도와주세요

    > 델파이 헬퍼의 묻고 답하기 에서

    > 렌으로 연결된 컴퓨터의 이름을 알 수 있는

    > 소스를 구하였습니다.(김대영님....)

    > 그런데 컴퓨터 그룹을 직접 입력하여야 합니다.

    > 컴퓨터 그룹만을 리스트로 만들수는 없는 것입니까

    > 가능하다면 가르쳐 주십시요.

    > 부탁합니다.



    저기...

    제 이름은 김영대인데요...



    아마도 아래 소스를 말씀하시는것 같은데 ServerName 변수를

    null 로 해서 GetNetworkUserName 를 호출해 보세요...



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

    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.