Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
{ **** UBPFD *********** by delphibase.endimus.com **** >> Получение списка серверов в локальной сети Класс-оболочка для функции NetServerEnum. Примечание. Проверялось только под WinNT/Win2000 (ничего другого под рукой нет). Методы ------------------ Create( AServer, ADomain : string; AServerMask : longint ); AServer - имя сервера, на котором выполняется функция; ADomain - имя домена, для которого запрашивается список серверов; AServerMask - флаги, задающие, список серверов какого типа следует получить. Этот параметр представляет собой набор флагов SV_TYPE_XXXX. подробнее - в исходнике и справке по функции WinAPI NetServerEnum. Refresh. Обновление списка серверов. Автоматически вызывается при создании класса, а также при присвоении значения свойству ServerMask. Свойства ------------------ Servers[ index : integer ] : TServerInfo Список объектов TServerInfo, содержащих информацию о найденных серверах - имя, версию, флаги. Count : integer Количество найденных серверов ServerMask : longint Маска поиска серверов. См. описание параметра AServerMask в конструкторе. Зависимости: Classes Автор: vuk Copyright: Алексей Вуколов Дата: 26 апреля 2002 г. ***************************************************** } unitNetSrvList; interface
uses
Classes; const
SV_TYPE_WORKSTATION = $00000001; // All LAN Manager workstations SV_TYPE_SERVER = $00000002; // All LAN Manager servers SV_TYPE_SQLSERVER = $00000004; // Any server running with Microsoft SQL Server SV_TYPE_DOMAIN_CTRL = $00000008; // Primary domain controller SV_TYPE_DOMAIN_BAKCTRL = $00000010; // Backup domain controller SV_TYPE_TIMESOURCE = $00000020; // Server running the Timesource service SV_TYPE_AFP = $00000040; // Apple File Protocol servers SV_TYPE_NOVELL = $00000080; // Novell servers SV_TYPE_DOMAIN_MEMBER = $00000100; // LAN Manager 2.x Domain Member SV_TYPE_LOCAL_LIST_ONLY = $40000000; // Servers maintained by the browser SV_TYPE_PRINT = $00000200; // Server sharing print queue SV_TYPE_DIALIN = $00000400; // Server running dial-in service SV_TYPE_XENIX_SERVER = $00000800; // Xenix server SV_TYPE_MFPN = $00004000; // Microsoft File and Print for Netware SV_TYPE_NT = $00001000; // Windows NT (either Workstation or Server) SV_TYPE_WFW = $00002000; // Server running Windows for Workgroups SV_TYPE_SERVER_NT = $00008000; // Windows NT non-DC server SV_TYPE_POTENTIAL_BROWSER = $00010000; // Server that can run the Browser service SV_TYPE_BACKUP_BROWSER = $00020000; // Server running a Browser service as backup SV_TYPE_MASTER_BROWSER = $00040000; // Server running the master Browser service SV_TYPE_DOMAIN_MASTER = $00080000; // Server running the domain master Browser SV_TYPE_DOMAIN_ENUM = $80000000; // Primary Domain SV_TYPE_WINDOWS = $00400000; // Windows 95 or later SV_TYPE_ALL = $FFFFFFFF; // All servers type
TServerInfo = class
(TObject) svr_Platform_ID: integer; svr_Name: WideString; svr_Version_Major, svr_Version_Minor, svr_Type: integer; svr_Comment: WideString; end
; TServerList = class
(TObject) protected
FList: TList; FServer, FDomain: WideString; FServerMask: longint; procedure
Clear; function
GetServer(Index
: integer): TServerInfo; function
GetCount: integer; procedure
SetServerMask(const
Value: longint); public
constructor
Create(AServer, ADomain: string
; AServerMask: longint); destructor
Destroy; override
; procedure
Refresh; property
Servers[index
: integer]: TServerInfo read
GetServer; default
; property
Count: integer read
GetCount; property
ServerMask: longint read
FServerMask write
SetServerMask; end
; implementation
uses
Sysutils; type
TServer_Info_101 = record
svr_Platform_ID: integer; svr_Name: PWideChar; svr_Version_Major, svr_Version_Minor, svr_Type: integer; svr_Comment: PWideChar; end
; TServer_Infos_101 = array
[1..($1FFFFFFF div
SizeOf(TServer_Info_101))] of
TServer_Info_101; function
NetServerEnum(ServerName: PWideChar; Level: longint; var
BufPtr: pointer; PrefMaxLen: longint; var
EntriesRead, TotalEntries: longint; ServType: longint; Domain: PWideChar; var
ResumeHandle: integer): longint; stdcall
; external
'netapi32.dll' name 'NetServerEnum'; constructor
TServerList.Create(AServer, ADomain: string
; AServerMask: longint); begin
inherited
Create; Flist := TList.Create; FServer := Aserver; FDomain := ADomain; FServerMask := AServerMask; Refresh; end
; destructor
TServerList.Destroy; begin
Clear; FList.Free; inherited
Destroy; end
; function
TServerList.GetServer(Index
: integer): TServerInfo; begin
Result := TServerInfo(FList[Index
]); end
; function
TServerList.GetCount: integer; begin
Result := FList.Count; end
; procedure
TServerList.Clear; var
i: integer; begin
for
i := 0 to
FList.Count - 1 do
Servers[i].Free; Flist.Clear; end
; procedure
TServerList.Refresh; var
EntRead, EntTotal, Resume, i: integer; Info: integer; Itm: TServerInfo; Data: pointer; pServer, pDomain: PWideChar; begin
if
FServer <> '' then
pServer := PWideChar(FServer) else
pServer := nil
; if
FDomain <> '' then
pDomain := PWideChar(FDomain) else
pDomain := nil
; Clear; Info := NetServerEnum(pServer, 101, Data, -1, EntRead, EntTotal, FServerMask, pDomain, Resume); if
Info = 0 then
for
i := 1 to
EntRead do
begin
Itm := TServerInfo.Create; with
TServer_Infos_101(Data^)[i] do
begin
Itm.svr_Platform_ID := svr_Platform_ID; Itm.svr_Name := svr_Name; Itm.svr_Version_Major := svr_Version_Major; Itm.svr_Version_Minor := svr_Version_Minor; Itm.svr_Type := svr_Type; Itm.svr_Comment := svr_Comment; end
; FList.Add(Itm); end
else
raise
Exception.Create('Cannot get server list'); end
; procedure
TServerList.SetServerMask(const
Value: longint); begin
FServerMask := Value; Refresh; end
; end
.
Пример использования:
procedureTForm1.Button1Click(Sender: TObject); var
List: TServerList; i: integer; begin
List := TServerList.Create('', '', SV_TYPE_ALL); for
i := 0 to
List.Count - 1 do
with
List[i] do
Memo1.Lines.Add(Format('%s %s %d.%d %s %x', [svr_Name, #9, svr_Version_Major, svr_Version_Minor, #9, svr_Type])); end
;