Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Перечислить сетевые соединения

Речь сисадмина к девушке, пришедшей регистрироваться на сервере:
- С точки зрения сетевой безопасности вы представляете собой потенциальную дырку.


{ 
  From the MS-DOS prompt, you can enumerate the network 
  connections (drives) by using the following command: 

   net use 

  Programmatically, you would call WNetOpenEnum() to start 
  the enumeration of connected resources and 
  WNetEnumResources() to continue the enumeration. 
  The following sample code enumerates the network connections: 
} 


procedure TForm1.Button1Click(Sender: TObject); 
var 
  i, dwResult: DWORD; 
  hEnum: THandle; 
  lpnrDrv: PNETRESOURCE; 
  s: string; 
const 
  cbBuffer: DWORD = 16384; 
  cEntries: DWORD = $FFFFFFFF; 
begin 
  dwResult := WNetOpenEnum(RESOURCE_CONNECTED, 
    RESOURCETYPE_ANY, 
    0, 
    nil, 
    hEnum); 

  if (dwResult <> NO_ERROR) then  
  begin 
    ShowMessage('Cannot enumerate network drives.'); 
    Exit; 
  end; 
  s := ''; 
  repeat 
    lpnrDrv  := PNETRESOURCE(GlobalAlloc(GPTR, cbBuffer)); 
    dwResult := WNetEnumResource(hEnum, cEntries, lpnrDrv, cbBuffer); 
    if (dwResult = NO_ERROR) then  
    begin 
      s := 'Network drives:'#13#10; 
      for i := 0 to cEntries - 1 do  
      begin 
        if lpnrDrv^.lpLocalName <> nil then 
          s := s + lpnrDrv^.lpLocalName + #9 + lpnrDrv^.lpRemoteName; 
        Inc(lpnrDrv); 
      end; 
    end 
    else if dwResult <> ERROR_NO_MORE_ITEMS then  
    begin 
      s := s + 'Cannot complete network drive enumeration'; 
      GlobalFree(HGLOBAL(lpnrDrv)); 
      break; 
    end; 
    GlobalFree(HGLOBAL(lpnrDrv)); 
  until (dwResult = ERROR_NO_MORE_ITEMS); 
  WNetCloseEnum(hEnum); 
  if s = '' then s := 'No network connections.'; 
  ShowMessage(s); 
end; 


{*********************************************************************** 
 FindComp Unit from 
 Fatih Olcer 
 fatiholcer@altavista.com 
***********************************************************************} 
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 World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay