中国程序员联盟 正在重新改版中ing 不便之处还请见谅 改版后将内容涉及java delphi .net php
 
  首页 | 数据库开发 | 网络通讯 | 多线程 | 多媒体开发 | 图像处理 | 程序人生 | 系统函数 | 控件开发 | Web服务
 
  当前位置:笨鱼delphi技术网>网络通讯>文章内容

delphi 查找所有网络计算机

来源:站内 关于:bill 发布时间:2007-06-29   [收藏] [推荐]
调用FindComputers,返回WinAPI错误代码(如果有的话)。这个函数将会在TStringList类型的Computers对象中填入计算机名称。

 

  以下代码是在Delphi5上开发的,但是应该是向后兼容的。

 

  Answer:

 

 

  unit FindComp;

 

  interface

 

  uses

  Windows, Classes;

 

  function FindComputers: DWORD;

 

  var

  Computers: TStringList;

 

  implementation

 

  uses

  SysUtils;

 

  const

  MaxEntries = 250;

 

  function FindComputers: DWORD;

 

  var

  EnumWorkGroupHandle, EnumComputerHandle: THandle;

  EnumError: DWORD;

  Network: TNetResource;

  WorkGroupEntries, ComputerEntries: DWORD;

  EnumWorkGroupBuffer, EnumComputerBuffer: array[1..MaxEntries] of TNetResource;

  EnumBufferLength: DWORD;

  I, J: DWORD;

 

  begin

 

  Computers.Clear;

 

  FillChar(Network, SizeOf(Network), 0);

  with Network do

  begin

  dwScope := RESOURCE_GLOBALNET;

  dwType := RESOURCETYPE_ANY;

  dwUsage := RESOURCEUSAGE_CONTAINER;

  end;

 

  EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @Network, EnumWorkGroupHandle);

 

  if EnumError = NO_ERROR then

  begin

  WorkGroupEntries := MaxEntries;

  EnumBufferLength := SizeOf(EnumWorkGroupBuffer);

  EnumError := WNetEnumResource(EnumWorkGroupHandle, WorkGroupEntries, @EnumWorkGroupBuffer, EnumBufferLength);

 

  if EnumError = NO_ERROR then

  begin

  for I := 1 to WorkGroupEntries do

  begin

  EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @EnumWorkGroupBuffer[I], EnumComputerHandle);

  if EnumError = NO_ERROR then

  begin

  ComputerEntries := MaxEntries;

  EnumBufferLength := SizeOf(EnumComputerBuffer);

  EnumError := WNetEnumResource(EnumComputerHandle, ComputerEntries, @EnumComputerBuffer, EnumBufferLength);

  if EnumError = NO_ERROR then

  for J := 1 to ComputerEntries do

  Computers.Add(Copy(EnumComputerBuffer[J].lpRemoteName, 3, Length(EnumComputerBuffer[J].lpRemoteName) - 2));

  WNetCloseEnum(EnumComputerHandle);

  end;

  end;

  end;

  WNetCloseEnum(EnumWorkGroupHandle);

  end;

 

  if EnumError = ERROR_NO_MORE_ITEMS then

  EnumError := NO_ERROR;

  Result := EnumError;

 

  end;

 

  initialization

 

  Computers := TStringList.Create;

 

  finalization

 

  Computers.Free;

 

  end.


[浏览: 次]   
上一篇:delphi 将一个6字节IP地址转换为4字节IP地址和端口号   下一篇:delphi 查找所有工作组内计算机
[收藏] [推荐] [返回顶部] [打印本页] [关闭窗口]  
    评论加载中…
google adsense热点文章
·delphi 学习WinSocket的编程
·delphi 用Delphi实现远程控制
·delphi 木马DIY
·delphi Delphi实现UDP广播
·delphi 检测计算机的 Internet 连接状
·delphi 获取BIOS信息
·delphi Base64编码转换
·delphi 发送raw IP类型的数据包
·delphi 使用ftp控件下载目录
·delphi 监测TCP IP协议是否安装了
·delphi 编写上网计费软件
·delphi 获取IP地址以及全部TCPIP连接的
     delphi技术网 | firefox 下载 | Avant Browser下载 | dedecms 技术网 | drupal 爱好者 | php 技术网
  Copyright@www.delphichm.com,2006-2009.All Rights Reserved.
 
程序员联盟 | delphi Java .net|QQ:707102932