function GetUsers(GroupName : string;var List : TStrings) :Boolean;
type
TNetResourceArray = ^TNetResource;
var
NetResource : TNetResource ;
Buf : Pointer;
Count,BufSize,Res : DWord;
lnd :Integer ;
lphEnum : THandle ;
Temp : TNetResourceArray ;
begin
Result := False;
List.Clear;
FillChar(NetResource,SizeOf(NetResource),0);
NetResource.lpRemoteName := @GroupName[1];
NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;
NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;
NetResource.dwScope := RESOURCETYPE_DISK;
Res := WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER,@NetResource,lphEnum);
if Res <> NO_ERROR then Exit;
while True do
begin
Count := $FFFFFFFF;
BufSize := 8192;
GetMem(Buf,BufSize);
Res := WNetEnumResource(lphEnum,Count,Pointer(Buf),BufSize);
if Res = ERROR_NO_MORE_ITEMS then break;
if (Res <> NO_ERROR) then exit;
Temp := TNetResourceArray(Buf);
For lnd :=0 to Count -1 do
begin
List.Add(Temp^.lpRemoteName );
Inc(Temp);
end;
end;
Res := WNetCloseEnum(lphEnum);
if Res <> NO_ERROR then exit;
Result := True;
FreeMem(Buf);
end;
type
TNetResourceArray = ^TNetResource;
var
NetResource : TNetResource ;
Buf : Pointer;
Count,BufSize,Res : DWord;
lnd :Integer ;
lphEnum : THandle ;
Temp : TNetResourceArray ;
begin
Result := False;
List.Clear;
FillChar(NetResource,SizeOf(NetResource),0);
NetResource.lpRemoteName := @GroupName[1];
NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;
NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;
NetResource.dwScope := RESOURCETYPE_DISK;
Res := WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER,@NetResource,lphEnum);
if Res <> NO_ERROR then Exit;
while True do
begin
Count := $FFFFFFFF;
BufSize := 8192;
GetMem(Buf,BufSize);
Res := WNetEnumResource(lphEnum,Count,Pointer(Buf),BufSize);
if Res = ERROR_NO_MORE_ITEMS then break;
if (Res <> NO_ERROR) then exit;
Temp := TNetResourceArray(Buf);
For lnd :=0 to Count -1 do
begin
List.Add(Temp^.lpRemoteName );
Inc(Temp);
end;
end;
Res := WNetCloseEnum(lphEnum);
if Res <> NO_ERROR then exit;
Result := True;
FreeMem(Buf);
end;
以下是调用。
procedure TForm2.Button1Click(Sender: TObject);
var
List : TStrings;
i : Integer;
begin
Memo1.Clear;
try
try
List := TStringList.Create;
if GetUsers(Edit1.Text,List) then
if List.Count = 0 then
begin
Memo1.Lines.Add(Edit1.Text + '工作组下没有计算机!');
end
else
begin
Memo1.Lines.Add(Edit1.Text+'下的计算机如下:');
for i := 0 to List.Count -1 do
begin
Memo1.Lines.Add(List.Strings[i]);
end;
end;
finally
List.Free;
end;
except
Memo1.Lines.Add(Edit1.Text + '工作组下没有计算机!');
end;
end;
如果我随意的输入一个工作组的时候(不存在的)就什么也不显示。
//
if GetUsers(Edit1.Text,List) then
if List.Count = 0 then
begin
Memo1.Lines.Add(Edit1.Text + '工作组下没有计算机!');
end
//
这段语句就不执行。高手帮我。
Memo1.Lines.Add(Edit1.Text + '工作组下没有计算机!');這樣就可