请教
1,怎么获得本机的名称,用什么函数
2,怎么获得局域网或工作组其他电脑的名称和IP

解决方案 »

  1.   

    {=================================================================  功  能: 列举工作组中所有的计算机  参  数:          List: 需要填充的List  返回值: 成功:  True,并填充List 失败: False;  备  注:  版  本:     1.0  2002/10/03 08:00:00=================================================================}Function TPub.NetGetUsers(GroupName: string; var List: TStringList): Boolean;type  TNetResourceArray = ^TNetResource;//网络类型的数组Var  i: Integer;  Buf: Pointer;  Temp: TNetResourceArray;  lphEnum: THandle;  NetResource: TNetResource;  Count,BufSize,Res: DWord;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;//缓冲区大小设置为8K    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 i := 0 to Count - 1 do//列举工作组的计算机名称    begin      //获取工作组的计算机名称,+2表示删除"\\",如\\wangfajun=>wangfajun      List.Add(Temp^.lpRemoteName + 2);      inc(Temp);    end;  end;  Res := WNetCloseEnum(lphEnum);//关闭一次列举  if Res <> NO_ERROR then exit;//执行失败  Result := True;  FreeMem(Buf);end;