请问如何得到局域网内所有开着的机器的列表?(100分)

  • 主题发起人 主题发起人 gzpbx
  • 开始时间 开始时间
这有一个例子:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Computer: array[1..500] of string[25];
ComputerCount: Integer;
procedure FindAllComputers(Workgroup: string);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
FindAllComputers('EARCH');
for i:=0 to 200 do
showmessage(computer);
end;

procedure TForm1.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 := 2;
dwType := 3;
dwDisplayType := 1;
dwUsage := 2;
lpRemoteName := @Workgroup[1];
end;

WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 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;
end.

 
这样速度太慢,还不如PING所有的机器来的快
 
对自动分配IP地址的机器, 用XXXEnum函数好象查不到它们的IP。
 
获得本地网络的计算机列表
http://www.lvyin.net/download/list.asp?id=34
 
我的主页上有这么一个例子:http://www.aidelphi.com

22、利用API函数获得网络中所有的记算资源名的Demo(源码)。Download!
 
谢谢,我正在研究各位提供的资料
 
后退
顶部