我在做一个程序,要求取得网络中所有的计算机的名称
(简单起见,取得windows中资源管理器中“邻近计算机”中的内容)
我在网上照到一个函数,如下
unit getComputers;interfaceuses
Windows, Classes;function FindComputers: DWORD;var
  Computers: TStringList;implementationuses
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.