Сейчас на форуме: zombi-vadim, tyns777 (+5 невидимых) |
eXeL@B —› Программирование —› Список компьютеров домена (Delphi) |
Посл.ответ | Сообщение |
|
Создано: 30 октября 2007 02:19 · Личное сообщение · #1 Собственно интересует не тормозной способ получения списка всех компов заданного домена, при условии, что компов в сети переваливает за 300....и код нужен именно на Дельфях.... Может быть есть какие-то варианты выдрать эти данные из DHCP или AD? Хотя в DHCP эти данные могут оказаться наверное не совсем актуальными? Вобщем помогите, горю! ----- бессмысленные манипуляции не становятся более разумными если их повторять |
|
Создано: 30 октября 2007 02:28 · Личное сообщение · #2 |
|
Создано: 30 октября 2007 03:40 · Личное сообщение · #3 |
|
Создано: 30 октября 2007 03:44 · Личное сообщение · #4 |
|
Создано: 30 октября 2007 07:45 · Поправил: sss · Личное сообщение · #5 |
|
Создано: 01 декабря 2007 14:10 · Личное сообщение · #6 можно так, но тормоз всетаки присудствует 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. |
|
Создано: 03 декабря 2007 09:54 · Личное сообщение · #7 |
eXeL@B —› Программирование —› Список компьютеров домена (Delphi) |