Q&A

  • 네트워크 그룹 리스트 구하기
안녕하세요! 이승우 입니다.

다름이 아니라 회사에 네트워크 그룹이 여러개 있을때

그 네트워크 그룹별로 컴퓨터 리스트를 구하는 프로그램을

만들었는데, 이상하게 몇개가 빠져서 나오더군요.

소스를 보시고 제가 잘못한게 있다면 지적을 좀 해주시겠어요?



//--------------Source-----------------//

unit Unit1;



interface



uses

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

StdCtrls, WinSock, ImgList, ComCtrls;



type

TForm1 = class(TForm)

Button1: TButton;

tvNetwork: TTreeView;

ImageList: TImageList;

StatusBar1: TStatusBar;

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

procedure GetNetworkComputerList; // 네트워크 환경에서 workgroup 목록

procedure GetWorkgroupList; // 네트워크 환경에서 workgroup에 속한 리소스 목록

// function FindIPAddress(Address: string; var PCName: string): Boolean;

public

{ Public declarations }

end;





var

Form1: TForm1;



implementation



{$R *.DFM}

uses ShellAPI;



var

Computer : Array[1..500] of String[25];

ComputerCount : Integer;

WorkgroupCount : Integer;

Workgroup : Array[1..500] of String[25];

NetworkScope : DWord;

BCancel : Boolean;



procedure FindAllWorkgroups;

Var

EnumHandle : THandle;

EntireNetwork : TNetResource;

Buf : Array[1..500] of TNetResource;

BufSize : DWord;

Entries : DWord;



begin

FillChar(EntireNetwork, SizeOf(EntireNetwork) , 0);

With EntireNetwork do begin

dwScope := 2;

dwDisplayType := 6;

dwUsage := 2;

end;



WNetOpenEnum( RESOURCE_GLOBALNET,

RESOURCETYPE_DISK,

0,

@EntireNetwork,

EnumHandle );



WorkgroupCount := 0;

Repeat

Entries := 1;

BufSize := SizeOf(Buf);



WNetEnumResource( EnumHandle,

Entries,

@Buf,

BufSize );

If Entries = 1 then begin

Inc( WorkgroupCount );

Workgroup[ WorkgroupCount ] := StrPas(Buf[1].lpRemoteName);

end;

Until (Entries <> 1);



WNetCloseEnum( EnumHandle );

end;



procedure FindAllComputers(Workgroup : String);

Var

EnumHandle : THandle;

WorkgroupRS : TNetResource;

Buf : Array[1..500] of TNetResource;

BufSize : Dword;

Entries : DWord;

Result : Integer;



begin

ComputerCount := 0;



Workgroup := Workgroup + #0;



FillChar(WorkgroupRS, SizeOf(WorkgroupRS) , 0);

With WorkgroupRS do begin

dwScope := RESOURCE_GLOBALNET;

dwType := RESOURCETYPE_DISK;

dwDisplayType := 1;

dwUsage := 2;

lpRemoteName := @Workgroup[1];

end;



WNetOpenEnum( RESOURCE_GLOBALNET,

RESOURCETYPE_DISK,

0,

@WorkgroupRS,

EnumHandle );



Repeat

Entries := 1;

BufSize := SizeOf(Buf);



Result :=

WNetEnumResource( EnumHandle,

Entries,

@Buf,

BufSize );

If (Result = NO_ERROR) and (Entries = 1) then begin

Inc( ComputerCount );

Computer[ ComputerCount ] := StrPas(Buf[1].lpRemoteName);

end;

Until (Entries <> 1) or (Result <> NO_ERROR);



WNetCloseEnum( EnumHandle );

end; { Find All Computers }



procedure TForm1.GetWorkgroupList;

var

I: Integer;

begin

Screen.Cursor:= crHourGlass;

tvNetwork.Items.Clear;

FindAllWorkgroups;

for I:= Low(Workgroup) to WorkgroupCount - 1 do

begin

tvNetwork.Items.AddChild(nil, Workgroup[I]);

end;

Screen.Cursor:= crDefault;

end;



procedure TForm1.GetNetworkComputerList;

var

I, J: Integer;

Node: TTreeNode;

begin

Screen.Cursor:= crHourGlass;

StatusBar1.Panels[2].Text:= '전체 네크워크를 검색하고 있습니다. 잠시 기다려 주십시오...';

StatusBar1.Update;

BCancel:= False;

tvNetwork.Items.Clear;

tvNetwork.Items.BeginUpdate;

FindAllWorkgroups;

for I:= Low(Workgroup) to WorkgroupCount - 1 do

begin

Node:= tvnetwork.Items.AddChild(nil, Workgroup[I]);

FindAllComputers(Workgroup[I]);

for J:= Low(Computer) to ComputerCount - 1 do

begin

Application.ProcessMessages;

if BCancel then

begin

Screen.Cursor:= crDefault;

StatusBar1.Panels[2].Text:= '작업이 취소되었습니다.';

Exit;

end;

tvNetwork.Items.AddChild(Node, Copy(Computer[J], 3, Length(Computer[J])));

end;

end;

tvNetwork.Items.EndUpdate;

Screen.Cursor:= crDefault;

StatusBar1.Panels[2].Text:= '네크워크 검색이 끝났습니다.';

end;



procedure TForm1.Button1Click(Sender: TObject);

begin

GetNetworkComputerList;

end;



procedure TForm1.FormCreate(Sender: TObject);

begin

NetworkScope:= RESOURCE_GLOBALNET;

BCancel:= False;

end;





end.

1  COMMENTS
  • Profile
    이승우 2000.10.05 00:53
    for I:= Low(Workgroup) to WorkgroupCount - 1 do



    for J:= Low(Computer) to ComputerCount - 1 do



    위의 두부분을

    for I:= Low(Workgroup) to WorkgroupCount do



    for J:= Low(Computer) to ComputerCount do

    으로 바꾸면 된다고 장길석 님께서 말씀을 하시더군요

    장길석님 다시한번 감사합니다.





    • 송길수
    • 2000.10.05 03:11
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 임형호
      2000.10.05 04:13
      송길수 wrote: > SUM함수를 사용하려 했더니 ALPHA형이라 계산이 안 돼는데.... > ALPHA값 을 NUMBER 값 ...
    • 송길수
      2000.10.05 05:58
      임형호 wrote: > 송길수 wrote: > > SUM함수를 사용하려 했더니 ALPHA형이라 계산이 안 돼는데.... > > ...
    • 임형호
      2000.10.05 07:54
      paradox에서 필드타입을 바꾸는 함수가 있습니다. 기억이 잘 안나네요. 델파이가 없어서리...죄송합니다. ...
    • 강인규
      2000.10.05 08:14
      Cast함수가 있네여. select sum(cast(필드명 as integer))as sabunhab from 테이블명 즐프하세여.......
    • 델왕호
    • 2000.10.05 02:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 쨍이
      2000.10.06 02:49
      델왕호 wrote: > dll 를 windows에 등록하는 방법좀 알려주세요.. > delphi에서 등록방법과 windows에서...
    • 김옥란
    • 2000.10.05 01:59
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 남기석
      2000.10.05 09:35
      안녕하세요 청개구리 남기석입니다. 코딩을 어떻게 하셨는지 모르겠지만... 저는 한 번에 되는데요.....
    • 사발우성
      2001.01.03 19:45
      dbchart란것이 있죠... 아래는 사용하는 방법? ^^ 제가 다른건 사용해본적이 없구 dbchart만 사용해봐서...
    • 남기석
      2000.10.05 09:43
      안녕하세요 청개구리 남기석입니다. 델파이에는 ChartFx 라는 훌륭한 Chart 콤포넌트가 있습니다. 콤...
    • 송길수
    • 2000.10.05 01:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 임형호
      2000.10.05 04:23
      여기 델파이가 없어서 정확하지는 않지만요. 우선 프로그램파일에 인터베이스에 가면 여러가지 프로그램...
    • 참사랑
    • 2000.10.05 01:07
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 각시탈
      2000.10.05 19:00
      각시탈 wrote: 음... const를 사용해서 해보았지만..안돼네여.. 다음 소스를 참고하시길.. unit Unit1...
    • 최석기
      2000.10.05 02:26
      안녕하세요.. 델파이세상(http://www.freechal.com/delphiworld)에 최석기입니다.. 저 같은 경우에는 ...
    • 김규억
    • 2000.10.05 00:50
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 임정영
      2000.10.26 19:01
      김규억 wrote: > 익스플로러에서 또다른 익스플로러를 열어서 그 안에 ActiveX로 작성한 ocx를 실행했습니...
    • 어린왕자
      2000.10.05 03:25
      코스모 wrote: > 환경 nt4.0 > 델파이 4.0 > 트리뷰에서 서브아이템추가 하는 방법좀 가르쳐 주세요... ...
    • 우희연
      2000.10.05 04:49
      어린왕자 wrote: > 코스모 wrote: > > 환경 nt4.0 > > 델파이 4.0 > > 트리뷰에서 서브아이템추가 하는...
    • 어린왕자
      2000.10.05 17:59
      우희연 wrote: > 어린왕자 wrote: > > 코스모 wrote: > > > 환경 nt4.0 > > > 델파이 4.0 > > > 트리...
    • cdjang
    • 2000.10.05 00:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김현
      2000.10.05 00:50
      ord('a') cdjang wrote: > 안녕하세요... > ================== > 아스키 문자값을 구하고 싶은데 잘...
    • 병부잡이
      2000.10.05 01:12
      쿼리를 재오픈시키시면 갱신된 내용이 디비 그리드에 뜨는게 당연한데 이걸 모르시는것은 아닌것 같고... ...
    • 한동우
      2000.10.05 01:07
      김옥란 wrote: > 테이블에 한 id에 관해서 여러번 저장이 가능해야 되서 주키는 주지 않았습니다. > 쿼리...
    • 김옥란
      2000.10.05 01:56
      한동우 wrote: > 김옥란 wrote: > > 테이블에 한 id에 관해서 여러번 저장이 가능해야 되서 주키는 주지 ...
    • 왕초보
    • 2000.10.04 23:12
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 나그네
      2000.10.04 23:41
      델파이 예제에 보면은 CACHED UPDATE가 하는 예제가 있는데 그걸 참조하심이 어떠실지 왕초보 wrote: >...
    • 이승우
    • 2000.10.04 23:04
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이승우
      2000.10.05 00:53
      for I:= Low(Workgroup) to WorkgroupCount - 1 do for J:= Low(Computer) to ComputerCount - 1 do...
    • 구창민
      2000.10.04 23:18
      까마귀 wrote: > 안녕하세요. 까마귀입니다. > > DBGrid에서 Options 속성이 있잖아요. > 그 세부항목...
    • 토토
    • 2000.10.04 22:36
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 토토
      2000.10.04 23:38
      제가 틀렸다고 질문한 코딩이 알고 보니 맞는 코딩이네요...하하하하하하하하 이런......... 잘되는군요....
    • 구창민
      2000.10.04 22:47
      토토 wrote: > var > done:integer; > sr:TSearchRec; > done1:integer; > sr1:TSearchRec; > nam:st...
    • 초초보
    • 2000.10.04 22:28
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2000.10.04 22:50
      초초보 wrote: > 안녕하세요..델초입니다. > 맨날 질문만 올리게 되어 송구럽습니다.. > 저두 빨리 실력...