科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道DELPHI在局域网中的一则应用

DELPHI在局域网中的一则应用

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

以上是通过DELPHI中的WIN API来获取局域网中的工作组信息,当然我们同样可以使用WIN API来获取局域网中的服务器以及其他终端信息,大家不妨按照上面的设计思路来试验一下。

作者:周勇 2008年5月23日

关键字: 局域网解决方案 局域网 局域网管理 局域网设置

  • 评论
  • 分享微博
  • 分享邮件

  如果您是一位局域网的系统管理员的话,肯定要经常对连接在局域网中的各个工作组进行管理和维修,并对每一台工作组建立相关的信息档案,以后只要根据这些档案信息就知道对应的工作组的运行情况,从而可以大大提高管理的效率了。此时,可能有人说,要查看这些工作组的信息,不是还要一台一台地打开、一台一台地查看吗?的确,如果还是这样操作的话,工作效率肯定还是不会提高,那么我们有没有办法同时获取局域网中的每一台工作组的信息呢?答案当然是肯定的,我们可以使用DELPHI中的WIN API来获取局域网中的每一台工作组的信息,下面是获取工作组信息的源代码:

  Function GetServerList( var List : TStringList ) : Boolean;

  Var //显示所有工作组的名称

  NetResource : TNetResource;

  Buf : Pointer;

  Count,BufSize,Res : DWORD;

  lphEnum : THandle;

  p : TNetResourceArray;

  i,j : SmallInt;

  NetworkTypeList : TList; //返回局域网中的工作组名称

  Begin

  Result := False;

  NetworkTypeList := TList.Create;

  List.Clear;

  //获取整个网络中的文件资源的句柄,lphEnum为返回名柄

  Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, Nil,lphEnum);

  If Res <>NO_ERROR Then exit;//Raise Exception(Res);//执行失败

  //获取整个网络中的网络类型信息

  Count := $FFFFFFFF;//不限资源数目

  BufSize := 8192;//缓冲区大小设置为8K

  GetMem(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//记录各个网络类型的信息

  Begin

  NetworkTypeList.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//列举一个网络类型的所有工作组的信息

  Begin

  Count := $FFFFFFFF;//不限资源数目

  BufSize := 8192;//缓冲区大小设置为8K

  GetMem(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//列举各个工作组的信息

  Begin

  List.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;

  以上是通过DELPHI中的WIN API来获取局域网中的工作组信息,当然我们同样可以使用WIN API来获取局域网中的服务器以及其他终端信息,大家不妨按照上面的设计思路来试验一下。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章