怎样取得工作组中的所有计算机名? 向各位大虾讨教: 怎样取得工作组中的所有计算机名? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 得到所有工作组:function TForm1.GetServerList(var List: TStringList): Boolean;VarNetResource : TNetResource;Buf : Pointer;Count,BufSize,Res : DWORD;lphEnum : THandle;p:TNetResourceArray;i,j : SmallInt;NetworkTypeList : TList;BeginResult := False;NetworkTypeList := TList.Create;List.Clear;Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER, Nil,lphEnum);//获取整个网络中的文件资源的句柄,lphEnum为返回名柄If Res <> NO_ERROR Then exit;//执行失败,退出//执行成功,开始获取整个网络中的网络类型信息Count := $FFFFFFFF;//不限资源数目BufSize := 8192;//缓冲区大小设置为8KGetMem(Buf, BufSize);//申请内存,用于获取工作组信息Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);If ( Res = ERROR_NO_MORE_ITEMS )//资源列举完毕or (Res <> NO_ERROR )//执行失败Then Exit;P := TNetResourceArray(Buf);For I := 0 To Count - 1 Do//记录各个网络类型的信息BeginNetworkTypeList.Add(p);Inc(P);End;//WNetCloseEnum关闭一个列举句柄Res:= WNetCloseEnum(lphEnum);//关闭一次列举If Res <> NO_ERROR Then exit;For J := 0 To NetworkTypeList.Count-1 Do//列出各个网络类型中的所有工作组名称Begin//列出一个网络类型中的所有工作组名称NetResource := TNetResource(NetworkTypeList.Items[J]^);//网络类型信息//获取某个网络类型的文件资源的句柄,NetResource为网络类型信息,lphEnum为返回名柄Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);If Res <> NO_ERROR Then break;//执行失败While true Do//列举一个网络类型的所有工作组的信息BeginCount := $FFFFFFFF;//不限资源数目BufSize := 8192;//缓冲区大小设置为8KGetMem(Buf, BufSize);//申请内存,用于获取工作组信息,获取一个网络类型的文件资源信息,Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);If ( Res = ERROR_NO_MORE_ITEMS )//资源列举完毕or (Res <> NO_ERROR)//执行失败then break;P := TNetResourceArray(Buf);For I := 0 To Count - 1 Do//列举各个工作组的信息BeginList.Add( StrPAS( P^.lpRemoteName ));//取得一个工作组的名称Inc(P);End;End;Res := WNetCloseEnum(lphEnum);//关闭一次列举If Res <> NO_ERROR Then break;//执行失败End;Result := True;FreeMem(Buf);NetworkTypeList.Destroy;End;得到一个工作组中所有用户:Function TForm1.GetUsers(GroupName:string):Boolean;Var NetResource:TNetResource; Buf : Pointer; Count,BufSize,Res : DWord; Ind : Integer; lphEnum : THandle; Temp:TNetResourceArray; IP:string;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 Ind := 0 to Count - 1 do//列举工作组的计算机名称 Begin IP:=copy(Temp^.lpRemoteName,3,length(Temp^.lpRemoteName)); if IP<>mycomputer.IP then CID.add (IP); Inc(Temp); End; End; Res := WNetCloseEnum(lphEnum);//关闭一次列举If Res <> NO_ERROR Then exit;//执行失败 Result:=True; FreeMem(Buf);end;用用户名得到IP地址:function TForm1.GetIP(Computer: string): string;var WSAData: TWSAData; HostEnt: PHostEnt; sComputerName, sIP: string;begin sComputername:=Computer; WSAStartup(2, WSAData); HostEnt := gethostbyname(PChar(sComputerName)); if HostEnt <> nil then begin with HostEnt^ do sIP := Format('%d.%d.%d.%d', [Byte(h_addr^[0]), Byte(h_addr^[1]), Byte(h_addr^[2]), Byte(h_addr^[3])]); end; WSACleanup; GetIP:=sIP;end; 给我mail,我给你一个有关NET的函数库 获取计算机名称的完全程序源代码如下://列举出指定工作组GroupName中的计算机名称,返回值为TRUE表示执行成功,//参数List中返回计算机名称Function GetUsers( GroupName : string; var List : TStringList ) : Boolean;VarNetResource : TNetResource;Buf : Pointer;Count,BufSize,Res : DWord;Ind : 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//列举指定工作组的网络资源BeginCount := $FFFFFFFF;//不限资源数目BufSize := 8192;//缓冲区大小设置为8KGetMem(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 Ind := 0 to Count - 1 do//列举工作组的计算机名称Begin//获取工作组的计算机名称,+2表示删除”\”,如\wangfajun=>wangfajunList.Add(Temp^.lpRemoteName + 2);Inc(Temp);End;End;Res := WNetCloseEnum(lphEnum);//关闭一次列举If Res <> NO_ERROR Then exit;//执行失败Result := True;FreeMem(Buf);End; 问一个很简单的问题,变量值变化,但是找不到错误的原因?请教大家了,悲剧啊 clientdataset批量更新问题 视频捕捉和图象保存问题咨询 怎样判断MaskEdit中输入的格式是否正确?? 耍了三年的女朋友今天给我提出分手,欲哭无泪,只有散分了。 一个关于Intraweb的简单问题 问2个DB数据库的问题?高分请教! 关于delphi显示big5文本问题 Tstrings类型的变量如何初始化? 为了她我决定弃VB而学DELPHI! 求救关于数据库输出为文本的问题(大哥大姐门我只有10了) 求修改MP3文件(ID3v)信息的代码???
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货